Index: tools/telemetry/telemetry/page/page_benchmark_results.py |
=================================================================== |
--- tools/telemetry/telemetry/page/page_benchmark_results.py (revision 182999) |
+++ tools/telemetry/telemetry/page/page_benchmark_results.py (working copy) |
@@ -1,154 +0,0 @@ |
-# Copyright (c) 2012 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. |
-from collections import defaultdict |
- |
-from telemetry.page import page_test |
-from telemetry.page import perf_tests_helper |
-from telemetry.page import page_benchmark_value |
- |
-class ValuesForSinglePage(object): |
- def __init__(self, page): |
- self.page = page |
- self.values = [] |
- |
- def AddValue(self, value): |
- self.values.append(value) |
- |
- @property |
- def measurement_names(self): |
- return [value.measurement_name for value in self.values] |
- |
- def FindValueByMeasurementName(self, measurement_name): |
- values = [value for value in self.values |
- if value.measurement_name == measurement_name] |
- assert len(values) <= 1 |
- if len(values): |
- return values[0] |
- return None |
- |
- def __getitem__(self, trace_name): |
- return self.FindValueByTraceName(trace_name) |
- |
- def __contains__(self, trace_name): |
- return self.FindValueByTraceName(trace_name) != None |
- |
- def FindValueByTraceName(self, trace_name): |
- values = [value for value in self.values |
- if value.trace_name == trace_name] |
- assert len(values) <= 1 |
- if len(values): |
- return values[0] |
- return None |
- |
-class PageBenchmarkResults(page_test.PageTestResults): |
- def __init__(self): |
- super(PageBenchmarkResults, self).__init__() |
- self._page_results = [] |
- |
- self._all_measurements_that_have_been_seen = {} |
- |
- self._values_for_current_page = {} |
- |
- def __getitem__(self, i): |
- """Shorthand for self.page_results[i]""" |
- return self._page_results[i] |
- |
- def __len__(self): |
- return len(self._page_results) |
- |
- @property |
- def values_for_current_page(self): |
- return self._values_for_current_page |
- |
- @property |
- def page_results(self): |
- return self._page_results |
- |
- def WillMeasurePage(self, page): |
- self._values_for_current_page = ValuesForSinglePage(page) |
- |
- @property |
- def all_measurements_that_have_been_seen(self): |
- return self._all_measurements_that_have_been_seen |
- |
- def Add(self, trace_name, units, value, chart_name=None, data_type='default'): |
- value = page_benchmark_value.PageBenchmarkValue( |
- trace_name, units, value, chart_name, data_type) |
- measurement_name = value.measurement_name |
- |
- # Sanity checks. |
- assert measurement_name != 'url', 'The name url cannot be used' |
- if measurement_name in self._all_measurements_that_have_been_seen: |
- measurement_data = \ |
- self._all_measurements_that_have_been_seen[measurement_name] |
- last_seen_units = measurement_data['units'] |
- last_seen_data_type = measurement_data['type'] |
- assert last_seen_units == units, \ |
- 'Unit cannot change for a name once it has been provided' |
- assert last_seen_data_type == data_type, \ |
- 'Unit cannot change for a name once it has been provided' |
- else: |
- self._all_measurements_that_have_been_seen[measurement_name] = { |
- 'units': units, |
- 'type': data_type} |
- |
- self._values_for_current_page.AddValue(value) |
- |
- def DidMeasurePage(self): |
- assert self._values_for_current_page, 'Failed to call WillMeasurePage' |
- self._page_results.append(self._values_for_current_page) |
- self._values_for_current_page = None |
- |
- def _PrintPerfResult(self, measurement, trace, values, units, |
- result_type='default'): |
- perf_tests_helper.PrintPerfResult( |
- measurement, trace, values, units, result_type) |
- |
- def PrintSummary(self, trace_tag): |
- if self.page_failures: |
- return |
- |
- # Build the results summary. |
- results_summary = defaultdict(list) |
- for measurement_name in \ |
- self._all_measurements_that_have_been_seen.iterkeys(): |
- for page_values in self._page_results: |
- value = page_values.FindValueByMeasurementName(measurement_name) |
- if not value: |
- continue |
- measurement_units_type = (measurement_name, |
- value.units, |
- value.data_type) |
- if value.data_type == 'histogram': |
- value_url = (value.value, page_values.page.url) |
- else: |
- value_url = (value.output_value, page_values.page.url) |
- results_summary[measurement_units_type].append(value_url) |
- |
- # Output the results summary sorted by name, then units, then data type. |
- for measurement_units_type, value_url_list in sorted( |
- results_summary.iteritems()): |
- measurement, units, data_type = measurement_units_type |
- |
- if data_type == 'histogram': |
- # For histograms, the _by_url data is important. |
- by_url_data_type = 'histogram' |
- else: |
- # For non-histograms, the _by_url data is unimportant. |
- by_url_data_type = 'unimportant' |
- if '.' in measurement: |
- measurement, trace = measurement.split('.', 1) |
- trace += (trace_tag or '') |
- else: |
- trace = measurement + (trace_tag or '') |
- |
- if not trace_tag: |
- for value, url in value_url_list: |
- self._PrintPerfResult(measurement + '_by_url', url, [value], units, |
- by_url_data_type) |
- |
- # For histograms, we don't print the average data, only the _by_url. |
- if not data_type == 'histogram': |
- values = [i[0] for i in value_url_list] |
- self._PrintPerfResult(measurement, trace, values, units, data_type) |