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) |