Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(185)

Unified Diff: tools/telemetry/telemetry/results/json_output_formatter.py

Issue 663023005: [Telemetry] Add file handle & trace value. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Ready to land ^^ Created 6 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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')

Powered by Google App Engine
This is Rietveld 408576698