| Index: tools/telemetry/telemetry/results/json_output_formatter.py
|
| diff --git a/tools/telemetry/telemetry/results/json_output_formatter.py b/tools/telemetry/telemetry/results/json_output_formatter.py
|
| index bf23ede9b8452d039c828b6e99720b65c74370b9..200dcaaa6e0bd716caf21299211e97df6a7ddf6d 100644
|
| --- a/tools/telemetry/telemetry/results/json_output_formatter.py
|
| +++ b/tools/telemetry/telemetry/results/json_output_formatter.py
|
| @@ -2,21 +2,27 @@
|
| # Use of this source code is governed by a BSD-style license that can be
|
| # found in the LICENSE file.
|
|
|
| +import errno
|
| +import itertools
|
| import json
|
| +import os
|
|
|
| from telemetry.results import output_formatter
|
| +from telemetry.util import file_handle
|
|
|
| -def ResultsAsDict(page_test_results, benchmark_metadata):
|
| +def ResultsAsDict(page_test_results, benchmark_metadata, dirname=os.curdir):
|
| """Takes PageTestResults to a dict serializable to JSON.
|
|
|
| To serialize results as JSON we first convert them to a dict that can be
|
| serialized by the json module. It also requires a benchmark_metadat object
|
| for metadata to be integrated into the results (currently the benchmark
|
| - name).
|
| + name). This function is also responsible for outputting trace files, if they
|
| + exist.
|
|
|
| Args:
|
| - page_test_results: a PageTestResults object
|
| - benchmark_metadata: a benchmark.BenchmarkMetadata object
|
| + page_test_results: A PageTestResults object
|
| + benchmark_metadata: A benchmark.BenchmarkMetadata object
|
| + dirname: The dir that the results are being output to.
|
| """
|
| result_dict = {
|
| 'format_version': '0.2',
|
| @@ -25,11 +31,39 @@ def ResultsAsDict(page_test_results, benchmark_metadata):
|
| page_test_results.all_summary_values],
|
| 'per_page_values': [v.AsDict() for v in
|
| page_test_results.all_page_specific_values],
|
| - 'pages': {p.id: p.AsDict() for p in _GetAllPages(page_test_results)}
|
| + 'pages': {p.id: p.AsDict() for p in _GetAllPages(page_test_results)},
|
| }
|
|
|
| + #TODO(eakuefner): Refactor this to support more than HTML results.
|
| + files = OutputFiles(page_test_results, dirname, '.html')
|
| +
|
| + if files:
|
| + result_dict['files'] = files
|
| +
|
| return result_dict
|
|
|
| +def OutputFiles(page_test_results, dirname, extension):
|
| + file_handles = _AllFileHandles(page_test_results)
|
| +
|
| + trace_dirname = dirname + '/trace_files'
|
| + try:
|
| + if file_handles:
|
| + os.makedirs(trace_dirname)
|
| + except OSError as exc:
|
| + if exc.errno == errno.EEXIST and os.path.isdir(trace_dirname):
|
| + pass
|
| + else:
|
| + raise
|
| +
|
| + return file_handle.OutputFiles(file_handles, trace_dirname + '/', extension)
|
| +
|
| +def _AllFileHandles(page_test_results):
|
| + values = itertools.chain(page_test_results.all_summary_values,
|
| + page_test_results.all_page_specific_values)
|
| + return [fh for fh in map(lambda value: value.GetAssociatedFileHandle(),
|
| + values)
|
| + if fh is not None]
|
| +
|
| def _GetAllPages(page_test_results):
|
| pages = set(page_run.page for page_run in
|
| page_test_results.all_page_runs)
|
|
|