1 # Copyright 2014 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file.
7 from telemetry.results import output_formatter
9 def ResultsAsDict(page_test_results, benchmark_metadata):
10 """Takes PageTestResults to a dict serializable to JSON.
12 To serialize results as JSON we first convert them to a dict that can be
13 serialized by the json module. It also requires a benchmark_metadat object
14 for metadata to be integrated into the results (currently the benchmark
18 page_test_results: a PageTestResults object
19 benchmark_metadata: a benchmark.BenchmarkMetadata object
22 'format_version': '0.2',
23 'benchmark_name': benchmark_metadata.name,
24 'summary_values': [v.AsDict() for v in
25 page_test_results.all_summary_values],
26 'per_page_values': [v.AsDict() for v in
27 page_test_results.all_page_specific_values],
28 'pages': {p.id: p.AsDict() for p in _GetAllPages(page_test_results)}
33 def _GetAllPages(page_test_results):
34 pages = set(page_run.page for page_run in
35 page_test_results.all_page_runs)
38 class JsonOutputFormatter(output_formatter.OutputFormatter):
39 def __init__(self, output_stream, benchmark_metadata):
40 super(JsonOutputFormatter, self).__init__(output_stream)
41 self._benchmark_metadata = benchmark_metadata
44 def benchmark_metadata(self):
45 return self._benchmark_metadata
47 def Format(self, page_test_results):
48 json.dump(ResultsAsDict(page_test_results, self.benchmark_metadata),
50 self.output_stream.write('\n')