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..62d771196735a5bb7a3ab5fa35427da9dc615944 100644 |
--- a/tools/telemetry/telemetry/results/json_output_formatter.py |
+++ b/tools/telemetry/telemetry/results/json_output_formatter.py |
@@ -3,20 +3,24 @@ |
# found in the LICENSE file. |
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, output_dir): |
"""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 will also output trace files if they exist. |
Args: |
page_test_results: a PageTestResults object |
benchmark_metadata: a benchmark.BenchmarkMetadata object |
+ output_dir: the directory that results are being output to. |
""" |
result_dict = { |
'format_version': '0.2', |
@@ -28,23 +32,41 @@ def ResultsAsDict(page_test_results, benchmark_metadata): |
'pages': {p.id: p.AsDict() for p in _GetAllPages(page_test_results)} |
} |
+ file_ids_to_paths = _OutputTraceFiles(page_test_results, output_dir) |
+ if file_ids_to_paths: |
+ result_dict['files'] = file_ids_to_paths |
return result_dict |
+ |
+def _OutputTraceFiles(page_test_results, output_dir): |
+ file_handles = page_test_results.all_file_handles |
+ if not file_handles: |
+ return {} |
+ trace_dir = os.path.join(output_dir, 'trace_files') |
+ if not os.path.isdir(trace_dir): |
+ os.makedirs(trace_dir) |
+ return file_handle.OutputFiles(file_handles, trace_dir) |
+ |
+ |
def _GetAllPages(page_test_results): |
pages = set(page_run.page for page_run in |
page_test_results.all_page_runs) |
return pages |
+ |
class JsonOutputFormatter(output_formatter.OutputFormatter): |
- def __init__(self, output_stream, benchmark_metadata): |
+ def __init__(self, output_stream, output_dir, benchmark_metadata): |
super(JsonOutputFormatter, self).__init__(output_stream) |
self._benchmark_metadata = benchmark_metadata |
+ self._output_dir = output_dir |
@property |
def benchmark_metadata(self): |
return self._benchmark_metadata |
def Format(self, page_test_results): |
- json.dump(ResultsAsDict(page_test_results, self.benchmark_metadata), |
+ json.dump( |
+ ResultsAsDict( |
+ page_test_results, self.benchmark_metadata, self._output_dir), |
self.output_stream) |
self.output_stream.write('\n') |