| OLD | NEW |
| 1 # Copyright 2014 The Chromium Authors. All rights reserved. | 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 | 2 # Use of this source code is governed by a BSD-style license that can be |
| 3 # found in the LICENSE file. | 3 # found in the LICENSE file. |
| 4 | 4 |
| 5 import collections | 5 import collections |
| 6 import itertools | 6 import itertools |
| 7 import json | 7 import json |
| 8 | 8 |
| 9 from telemetry.results import output_formatter | 9 from telemetry.results import output_formatter |
| 10 from telemetry.value import summary as summary_module | 10 from telemetry.value import summary as summary_module |
| (...skipping 20 matching lines...) Expand all Loading... |
| 31 A Chart JSON dict corresponding to the given data. | 31 A Chart JSON dict corresponding to the given data. |
| 32 """ | 32 """ |
| 33 summary = summary_module.Summary(page_specific_values) | 33 summary = summary_module.Summary(page_specific_values) |
| 34 values = itertools.chain( | 34 values = itertools.chain( |
| 35 summary.interleaved_computed_per_page_values_and_summaries, | 35 summary.interleaved_computed_per_page_values_and_summaries, |
| 36 summary_values) | 36 summary_values) |
| 37 charts = collections.defaultdict(dict) | 37 charts = collections.defaultdict(dict) |
| 38 | 38 |
| 39 for value in values: | 39 for value in values: |
| 40 if value.page: | 40 if value.page: |
| 41 chart_name, trace_name = ( | 41 chart_name, trace_name = (value.GetChartAndTraceNameForPerPageResult()) |
| 42 value.GetChartAndTraceNameForPerPageResult()) | |
| 43 else: | 42 else: |
| 44 chart_name, trace_name = ( | 43 chart_name, trace_name = ( |
| 45 value.GetChartAndTraceNameForComputedSummaryResult(None)) | 44 value.GetChartAndTraceNameForComputedSummaryResult(None)) |
| 46 if chart_name == trace_name: | 45 if chart_name == trace_name: |
| 47 trace_name = 'summary' | 46 trace_name = 'summary' |
| 48 | 47 |
| 49 assert trace_name not in charts[chart_name] | 48 # This intentionally overwrites the trace if it already exists because this |
| 50 | 49 # is expected of output from the buildbots currently. |
| 50 # See: crbug.com/413393 |
| 51 charts[chart_name][trace_name] = value.AsDict() | 51 charts[chart_name][trace_name] = value.AsDict() |
| 52 | 52 |
| 53 result_dict = { | 53 result_dict = { |
| 54 'format_version': '0.1', | 54 'format_version': '0.1', |
| 55 'benchmark_name': benchmark_metadata.name, | 55 'benchmark_name': benchmark_metadata.name, |
| 56 'charts': charts | 56 'charts': charts |
| 57 } | 57 } |
| 58 | 58 |
| 59 return result_dict | 59 return result_dict |
| 60 | 60 |
| 61 # TODO(eakuefner): Transition this to translate Telemetry JSON. | 61 # TODO(eakuefner): Transition this to translate Telemetry JSON. |
| 62 class ChartJsonOutputFormatter(output_formatter.OutputFormatter): | 62 class ChartJsonOutputFormatter(output_formatter.OutputFormatter): |
| 63 def __init__(self, output_stream, benchmark_metadata): | 63 def __init__(self, output_stream, benchmark_metadata): |
| 64 super(ChartJsonOutputFormatter, self).__init__(output_stream) | 64 super(ChartJsonOutputFormatter, self).__init__(output_stream) |
| 65 self._benchmark_metadata = benchmark_metadata | 65 self._benchmark_metadata = benchmark_metadata |
| 66 | 66 |
| 67 def Format(self, page_test_results): | 67 def Format(self, page_test_results): |
| 68 json.dump(_ResultsAsChartDict( | 68 json.dump(_ResultsAsChartDict( |
| 69 self._benchmark_metadata, | 69 self._benchmark_metadata, |
| 70 page_test_results.all_page_specific_values, | 70 page_test_results.all_page_specific_values, |
| 71 page_test_results.all_summary_values), | 71 page_test_results.all_summary_values), |
| 72 self.output_stream) | 72 self.output_stream) |
| 73 self.output_stream.write('\n') | 73 self.output_stream.write('\n') |
| OLD | NEW |