Upstream version 10.39.225.0
[platform/framework/web/crosswalk.git] / src / tools / telemetry / telemetry / results / json_output_formatter.py
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.results import output_formatter
8
9 def ResultsAsDict(page_test_results, benchmark_metadata):
10   """Takes PageTestResults to a dict serializable to JSON.
11
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
15   name).
16
17   Args:
18     page_test_results: a PageTestResults object
19     benchmark_metadata: a benchmark.BenchmarkMetadata object
20   """
21   result_dict = {
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)}
29   }
30
31   return result_dict
32
33 def _GetAllPages(page_test_results):
34   pages = set(page_run.page for page_run in
35               page_test_results.all_page_runs)
36   return pages
37
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
42
43   @property
44   def benchmark_metadata(self):
45     return self._benchmark_metadata
46
47   def Format(self, page_test_results):
48     json.dump(ResultsAsDict(page_test_results, self.benchmark_metadata),
49         self.output_stream)
50     self.output_stream.write('\n')