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) |