| OLD | NEW |
| 1 # Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 # Copyright (c) 2013 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 from collections import defaultdict | 5 from collections import defaultdict |
| 6 from itertools import chain | 6 from itertools import chain |
| 7 | 7 |
| 8 from telemetry.page import page_measurement_results | 8 from telemetry.page import page_measurement_results |
| 9 from telemetry.page import page_measurement_value |
| 9 from telemetry.page import perf_tests_helper | 10 from telemetry.page import perf_tests_helper |
| 10 | 11 |
| 11 class BuildbotPageMeasurementResults( | 12 class BuildbotPageMeasurementResults( |
| 12 page_measurement_results.PageMeasurementResults): | 13 page_measurement_results.PageMeasurementResults): |
| 13 def __init__(self, trace_tag=''): | 14 def __init__(self, trace_tag=''): |
| 14 super(BuildbotPageMeasurementResults, self).__init__() | 15 super(BuildbotPageMeasurementResults, self).__init__() |
| 15 self._trace_tag = trace_tag | 16 self._trace_tag = trace_tag |
| 16 | 17 |
| 17 def _PrintPerfResult(self, measurement, trace, values, units, | 18 def _PrintPerfResult(self, measurement, trace, values, units, |
| 18 result_type='default'): | 19 result_type='default'): |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 62 # Output the results summary sorted by measurement name, then units, then | 63 # Output the results summary sorted by measurement name, then units, then |
| 63 # data type. | 64 # data type. |
| 64 for measurement_units_type, value_and_display_name_list in sorted( | 65 for measurement_units_type, value_and_display_name_list in sorted( |
| 65 results_summary.iteritems()): | 66 results_summary.iteritems()): |
| 66 measurement, units, data_type = measurement_units_type | 67 measurement, units, data_type = measurement_units_type |
| 67 | 68 |
| 68 if 'histogram' in data_type: | 69 if 'histogram' in data_type: |
| 69 by_name_data_type = 'unimportant-histogram' | 70 by_name_data_type = 'unimportant-histogram' |
| 70 else: | 71 else: |
| 71 by_name_data_type = 'unimportant' | 72 by_name_data_type = 'unimportant' |
| 72 if '.' in measurement and 'histogram' not in data_type: | 73 |
| 73 measurement, trace = measurement.split('.', 1) | 74 trace = '' |
| 74 trace += self._trace_tag | 75 if 'histogram' not in data_type: |
| 75 else: | 76 measurement, trace = \ |
| 76 trace = measurement + self._trace_tag | 77 page_measurement_value.ChartTraceFromMeasurement(measurement) |
| 78 if not measurement: |
| 79 measurement = trace |
| 80 trace += self._trace_tag |
| 77 | 81 |
| 78 # Print individual _by_name results if there's more than 1 successful | 82 # Print individual _by_name results if there's more than 1 successful |
| 79 # page, or if there's exactly 1 successful page but a failure exists. | 83 # page, or if there's exactly 1 successful page but a failure exists. |
| 80 if not self._trace_tag and (len(value_and_display_name_list) > 1 or | 84 if not self._trace_tag and (len(value_and_display_name_list) > 1 or |
| 81 ((self.errors or self.failures) and | 85 ((self.errors or self.failures) and |
| 82 len(value_and_display_name_list) == 1)): | 86 len(value_and_display_name_list) == 1)): |
| 83 name_value_map = defaultdict(list) | 87 name_value_map = defaultdict(list) |
| 84 for value, name in value_and_display_name_list: | 88 for value, name in value_and_display_name_list: |
| 85 if 'histogram' in data_type and name_value_map[name]: | 89 if 'histogram' in data_type and name_value_map[name]: |
| 86 # TODO(tonyg/marja): The histogram processing code only accepts one | 90 # TODO(tonyg/marja): The histogram processing code only accepts one |
| (...skipping 12 matching lines...) Expand all Loading... |
| 99 # For histograms, we don't print the average data, only the _by_name, | 103 # For histograms, we don't print the average data, only the _by_name, |
| 100 # unless there is only 1 page in which case the _by_names are omitted. | 104 # unless there is only 1 page in which case the _by_names are omitted. |
| 101 if not (self.errors or self.failures): | 105 if not (self.errors or self.failures): |
| 102 if ('histogram' not in data_type or | 106 if ('histogram' not in data_type or |
| 103 len(value_and_display_name_list) == 1): | 107 len(value_and_display_name_list) == 1): |
| 104 values = [i[0] for i in value_and_display_name_list] | 108 values = [i[0] for i in value_and_display_name_list] |
| 105 if isinstance(values[0], list): | 109 if isinstance(values[0], list): |
| 106 values = list(chain.from_iterable(values)) | 110 values = list(chain.from_iterable(values)) |
| 107 self._PrintPerfResult(measurement, trace, values, units, data_type) | 111 self._PrintPerfResult(measurement, trace, values, units, data_type) |
| 108 | 112 |
| 113 # Output all the by_name comparisons. This is safe no matter |
| 114 # whether the _by_name results above were output, as the final |
| 115 # display needs to detect and ignore comparisons that refer to |
| 116 # non-existent base statistics. |
| 117 for compare_stat in [x for x in self._comparison_stats.iteritems()]: |
| 118 (result_stat_measurement, result_stat_trace) = \ |
| 119 page_measurement_value.ChartTraceFromMeasurement(compare_stat[0]) |
| 120 if not result_stat_measurement: |
| 121 result_stat_measurement = result_stat_trace |
| 122 (ref_stat_measurement, ref_stat_trace) = \ |
| 123 page_measurement_value.ChartTraceFromMeasurement( |
| 124 compare_stat[1]['reference']) |
| 125 if not ref_stat_measurement: |
| 126 ref_stat_measurement = ref_stat_trace |
| 127 (comparison_stat_measurement, comparison_stat_trace) = \ |
| 128 page_measurement_value.ChartTraceFromMeasurement( |
| 129 compare_stat[1]['comparison']) |
| 130 if not comparison_stat_measurement: |
| 131 comparison_stat_measurement = comparison_stat_trace |
| 132 for name in unique_pages: |
| 133 self.AddComparison(name, ref_stat_measurement + '_by_url', |
| 134 name, comparison_stat_measurement + '_by_url', |
| 135 name, result_stat_measurement + '_by_url') |
| 136 |
| 109 # If there were no failed pages, output the overall results (results not | 137 # If there were no failed pages, output the overall results (results not |
| 110 # associated with a page). | 138 # associated with a page). |
| 111 if not (self.errors or self.failures): | 139 if not (self.errors or self.failures): |
| 112 for value in self._overall_results: | 140 for value in self._overall_results: |
| 113 values = value.value | 141 values = value.value |
| 114 if not isinstance(values, list): | 142 if not isinstance(values, list): |
| 115 values = [values] | 143 values = [values] |
| 116 measurement_name = value.chart_name | 144 measurement_name = value.chart_name |
| 117 if not measurement_name: | 145 if not measurement_name: |
| 118 measurement_name = value.trace_name | 146 measurement_name = value.trace_name |
| 119 self._PrintPerfResult(measurement_name, | 147 self._PrintPerfResult(measurement_name, |
| 120 value.trace_name + self._trace_tag, | 148 value.trace_name + self._trace_tag, |
| 121 values, value.units, value.data_type) | 149 values, value.units, value.data_type) |
| 122 | 150 |
| 123 # Print the number of failed and errored pages. | 151 # Print the number of failed and errored pages. |
| 124 self._PrintPerfResult('telemetry_page_measurement_results', 'num_failed', | 152 self._PrintPerfResult('telemetry_page_measurement_results', 'num_failed', |
| 125 [len(self.failures)], 'count', 'unimportant') | 153 [len(self.failures)], 'count', 'unimportant') |
| 126 self._PrintPerfResult('telemetry_page_measurement_results', 'num_errored', | 154 self._PrintPerfResult('telemetry_page_measurement_results', 'num_errored', |
| 127 [len(self.errors)], 'count', 'unimportant') | 155 [len(self.errors)], 'count', 'unimportant') |
| 128 | 156 |
| 129 super(BuildbotPageMeasurementResults, self).PrintSummary() | 157 super(BuildbotPageMeasurementResults, self).PrintSummary() |
| OLD | NEW |