| Index: tools/telemetry/telemetry/page/page_benchmark_results.py
|
| diff --git a/tools/telemetry/telemetry/page/page_benchmark_results.py b/tools/telemetry/telemetry/page/page_benchmark_results.py
|
| index 32eab68a49905a5d8f0a3ebabcbcb7480e0c0f3b..c6c14bba3e262722ba51f9e052766a1f536c1f83 100644
|
| --- a/tools/telemetry/telemetry/page/page_benchmark_results.py
|
| +++ b/tools/telemetry/telemetry/page/page_benchmark_results.py
|
| @@ -120,12 +120,21 @@ class PageBenchmarkResults(page_test.PageTestResults):
|
| measurement, trace, values, units, result_type)
|
|
|
| def PrintSummary(self, trace_tag):
|
| - if self.page_failures:
|
| - return
|
| + """Print summary data in a format expected by buildbot for perf dashboards.
|
| +
|
| + If any failed pages exist, only output individual page results for
|
| + non-failing pages, and do not output any average data.
|
| +
|
| + Args:
|
| + trace_tag: a string tag to append to the key for a result trace.
|
| + """
|
| + failed_pages = [p['page'] for p in self.page_failures]
|
| + success_page_results = [r for r in self._page_results
|
| + if r.page not in failed_pages]
|
|
|
| # Print out the list of unique pages.
|
| unique_page_urls = []
|
| - for page_values in self._page_results:
|
| + for page_values in success_page_results:
|
| url = page_values.page.display_url
|
| if unique_page_urls and unique_page_urls[0] == url:
|
| break
|
| @@ -136,7 +145,7 @@ class PageBenchmarkResults(page_test.PageTestResults):
|
| results_summary = defaultdict(list)
|
| for measurement_name in \
|
| self._all_measurements_that_have_been_seen.iterkeys():
|
| - for page_values in self._page_results:
|
| + for page_values in success_page_results:
|
| value = page_values.FindValueByMeasurementName(measurement_name)
|
| if not value:
|
| continue
|
| @@ -161,7 +170,10 @@ class PageBenchmarkResults(page_test.PageTestResults):
|
| else:
|
| trace = measurement + (trace_tag or '')
|
|
|
| - if not trace_tag and len(value_url_list) > 1:
|
| + # Print individual _by_url results if there's more than 1 successful page,
|
| + # or if there's exactly 1 successful page but a failure exists.
|
| + if not trace_tag and (len(value_url_list) > 1 or
|
| + (self.page_failures and len(value_url_list) == 1)):
|
| url_value_map = defaultdict(list)
|
| for value, url in value_url_list:
|
| if 'histogram' in data_type and url_value_map[url]:
|
| @@ -174,21 +186,25 @@ class PageBenchmarkResults(page_test.PageTestResults):
|
| self._PrintPerfResult(measurement + '_by_url', url,
|
| url_value_map[url], units, by_url_data_type)
|
|
|
| + # If there were no page failures, print the average data.
|
| # For histograms, we don't print the average data, only the _by_url,
|
| # unless there is only 1 page in which case the _by_urls are omitted.
|
| - if 'histogram' not in data_type or len(value_url_list) == 1:
|
| - values = [i[0] for i in value_url_list]
|
| - if isinstance(values[0], list):
|
| - values = list(chain.from_iterable(values))
|
| - self._PrintPerfResult(measurement, trace, values, units, data_type)
|
| -
|
| - # Output the overall results (results not associated with a page).
|
| - for value in self._overall_results:
|
| - values = value.value
|
| - if not isinstance(values, list):
|
| - values = [values]
|
| - measurement_name = value.chart_name
|
| - if not measurement_name:
|
| - measurement_name = value.trace_name
|
| - self._PrintPerfResult(measurement_name, value.trace_name,
|
| - values, value.units, value.data_type)
|
| + if not self.page_failures:
|
| + if 'histogram' not in data_type or len(value_url_list) == 1:
|
| + values = [i[0] for i in value_url_list]
|
| + if isinstance(values[0], list):
|
| + values = list(chain.from_iterable(values))
|
| + self._PrintPerfResult(measurement, trace, values, units, data_type)
|
| +
|
| + # If there were no failed pages, output the overall results (results not
|
| + # associated with a page).
|
| + if not self.page_failures:
|
| + for value in self._overall_results:
|
| + values = value.value
|
| + if not isinstance(values, list):
|
| + values = [values]
|
| + measurement_name = value.chart_name
|
| + if not measurement_name:
|
| + measurement_name = value.trace_name
|
| + self._PrintPerfResult(measurement_name, value.trace_name,
|
| + values, value.units, value.data_type)
|
|
|