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

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

Issue 545523002: [Telemetry] Add capability for values to reference external files. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Work around GPU triggered tests not knowing about trace_viewer Created 6 years, 3 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..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)

Powered by Google App Engine
This is Rietveld 408576698