Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1050)

Side by Side Diff: tools/telemetry/telemetry/page/buildbot_page_measurement_results.py

Issue 23431036: Create and display "comparison statistics" to compare two statistics Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Sync'd to r233008. Created 7 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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
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
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()
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698