OLD | NEW |
| (Empty) |
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. | |
4 | |
5 import json | |
6 | |
7 from telemetry.internal.results import output_formatter | |
8 | |
9 | |
10 def ResultsAsDict(page_test_results, benchmark_metadata): | |
11 """Takes PageTestResults to a dict serializable to JSON. | |
12 | |
13 To serialize results as JSON we first convert them to a dict that can be | |
14 serialized by the json module. It also requires a benchmark_metadat object | |
15 for metadata to be integrated into the results (currently the benchmark | |
16 name). This function will also output trace files if they exist. | |
17 | |
18 Args: | |
19 page_test_results: a PageTestResults object | |
20 benchmark_metadata: a benchmark.BenchmarkMetadata object | |
21 """ | |
22 result_dict = { | |
23 'format_version': '0.2', | |
24 'next_version': '0.3', | |
25 # TODO(sullivan): benchmark_name should be removed when updating | |
26 # format_version to 0.3. | |
27 'benchmark_name': benchmark_metadata.name, | |
28 'benchmark_metadata': benchmark_metadata.AsDict(), | |
29 'summary_values': [v.AsDict() for v in | |
30 page_test_results.all_summary_values], | |
31 'per_page_values': [v.AsDict() for v in | |
32 page_test_results.all_page_specific_values], | |
33 'pages': {p.id: p.AsDict() for p in _GetAllPages(page_test_results)} | |
34 } | |
35 if page_test_results.serialized_trace_file_ids_to_paths: | |
36 result_dict['files'] = page_test_results.serialized_trace_file_ids_to_paths | |
37 return result_dict | |
38 | |
39 | |
40 def _GetAllPages(page_test_results): | |
41 pages = set(page_run.story for page_run in | |
42 page_test_results.all_page_runs) | |
43 return pages | |
44 | |
45 | |
46 class JsonOutputFormatter(output_formatter.OutputFormatter): | |
47 def __init__(self, output_stream, benchmark_metadata): | |
48 super(JsonOutputFormatter, self).__init__(output_stream) | |
49 self._benchmark_metadata = benchmark_metadata | |
50 | |
51 @property | |
52 def benchmark_metadata(self): | |
53 return self._benchmark_metadata | |
54 | |
55 def Format(self, page_test_results): | |
56 json.dump( | |
57 ResultsAsDict(page_test_results, self.benchmark_metadata), | |
58 self.output_stream, indent=2) | |
59 self.output_stream.write('\n') | |
OLD | NEW |