blob: 81dd35ffca3568b522fa6b78fa4f97026a157939 [file] [log] [blame]
# Copyright 2014 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
import json
from telemetry.internal.results import output_formatter
def ResultsAsDict(page_test_results, benchmark_metadata):
"""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). This function will also output trace files if they exist.
Args:
page_test_results: a PageTestResults object
benchmark_metadata: a benchmark.BenchmarkMetadata object
"""
result_dict = {
'format_version': '0.2',
'next_version': '0.3',
# TODO(sullivan): benchmark_name should be removed when updating
# format_version to 0.3.
'benchmark_name': benchmark_metadata.name,
'benchmark_metadata': benchmark_metadata.AsDict(),
'summary_values': [v.AsDict() for v in
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)}
}
if page_test_results.serialized_trace_file_ids_to_paths:
result_dict['files'] = page_test_results.serialized_trace_file_ids_to_paths
return result_dict
def _GetAllPages(page_test_results):
pages = set(page_run.story for page_run in
page_test_results.all_page_runs)
return pages
class JsonOutputFormatter(output_formatter.OutputFormatter):
def __init__(self, output_stream, benchmark_metadata):
super(JsonOutputFormatter, self).__init__(output_stream)
self._benchmark_metadata = benchmark_metadata
@property
def benchmark_metadata(self):
return self._benchmark_metadata
def Format(self, page_test_results):
json.dump(
ResultsAsDict(page_test_results, self.benchmark_metadata),
self.output_stream, indent=2)
self.output_stream.write('\n')