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

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

Issue 12294002: Revert 182991 (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 7 years, 10 months 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
(Empty)
1 # Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file.
4 from collections import defaultdict
5
6 from telemetry.page import page_test
7 from telemetry.page import perf_tests_helper
8 from telemetry.page import page_benchmark_value
9
10 class ValuesForSinglePage(object):
11 def __init__(self, page):
12 self.page = page
13 self.values = []
14
15 def AddValue(self, value):
16 self.values.append(value)
17
18 @property
19 def measurement_names(self):
20 return [value.measurement_name for value in self.values]
21
22 def FindValueByMeasurementName(self, measurement_name):
23 values = [value for value in self.values
24 if value.measurement_name == measurement_name]
25 assert len(values) <= 1
26 if len(values):
27 return values[0]
28 return None
29
30 def __getitem__(self, trace_name):
31 return self.FindValueByTraceName(trace_name)
32
33 def __contains__(self, trace_name):
34 return self.FindValueByTraceName(trace_name) != None
35
36 def FindValueByTraceName(self, trace_name):
37 values = [value for value in self.values
38 if value.trace_name == trace_name]
39 assert len(values) <= 1
40 if len(values):
41 return values[0]
42 return None
43
44 class PageBenchmarkResults(page_test.PageTestResults):
45 def __init__(self):
46 super(PageBenchmarkResults, self).__init__()
47 self._page_results = []
48
49 self._all_measurements_that_have_been_seen = {}
50
51 self._values_for_current_page = {}
52
53 def __getitem__(self, i):
54 """Shorthand for self.page_results[i]"""
55 return self._page_results[i]
56
57 def __len__(self):
58 return len(self._page_results)
59
60 @property
61 def values_for_current_page(self):
62 return self._values_for_current_page
63
64 @property
65 def page_results(self):
66 return self._page_results
67
68 def WillMeasurePage(self, page):
69 self._values_for_current_page = ValuesForSinglePage(page)
70
71 @property
72 def all_measurements_that_have_been_seen(self):
73 return self._all_measurements_that_have_been_seen
74
75 def Add(self, trace_name, units, value, chart_name=None, data_type='default'):
76 value = page_benchmark_value.PageBenchmarkValue(
77 trace_name, units, value, chart_name, data_type)
78 measurement_name = value.measurement_name
79
80 # Sanity checks.
81 assert measurement_name != 'url', 'The name url cannot be used'
82 if measurement_name in self._all_measurements_that_have_been_seen:
83 measurement_data = \
84 self._all_measurements_that_have_been_seen[measurement_name]
85 last_seen_units = measurement_data['units']
86 last_seen_data_type = measurement_data['type']
87 assert last_seen_units == units, \
88 'Unit cannot change for a name once it has been provided'
89 assert last_seen_data_type == data_type, \
90 'Unit cannot change for a name once it has been provided'
91 else:
92 self._all_measurements_that_have_been_seen[measurement_name] = {
93 'units': units,
94 'type': data_type}
95
96 self._values_for_current_page.AddValue(value)
97
98 def DidMeasurePage(self):
99 assert self._values_for_current_page, 'Failed to call WillMeasurePage'
100 self._page_results.append(self._values_for_current_page)
101 self._values_for_current_page = None
102
103 def _PrintPerfResult(self, measurement, trace, values, units,
104 result_type='default'):
105 perf_tests_helper.PrintPerfResult(
106 measurement, trace, values, units, result_type)
107
108 def PrintSummary(self, trace_tag):
109 if self.page_failures:
110 return
111
112 # Build the results summary.
113 results_summary = defaultdict(list)
114 for measurement_name in \
115 self._all_measurements_that_have_been_seen.iterkeys():
116 for page_values in self._page_results:
117 value = page_values.FindValueByMeasurementName(measurement_name)
118 if not value:
119 continue
120 measurement_units_type = (measurement_name,
121 value.units,
122 value.data_type)
123 if value.data_type == 'histogram':
124 value_url = (value.value, page_values.page.url)
125 else:
126 value_url = (value.output_value, page_values.page.url)
127 results_summary[measurement_units_type].append(value_url)
128
129 # Output the results summary sorted by name, then units, then data type.
130 for measurement_units_type, value_url_list in sorted(
131 results_summary.iteritems()):
132 measurement, units, data_type = measurement_units_type
133
134 if data_type == 'histogram':
135 # For histograms, the _by_url data is important.
136 by_url_data_type = 'histogram'
137 else:
138 # For non-histograms, the _by_url data is unimportant.
139 by_url_data_type = 'unimportant'
140 if '.' in measurement:
141 measurement, trace = measurement.split('.', 1)
142 trace += (trace_tag or '')
143 else:
144 trace = measurement + (trace_tag or '')
145
146 if not trace_tag:
147 for value, url in value_url_list:
148 self._PrintPerfResult(measurement + '_by_url', url, [value], units,
149 by_url_data_type)
150
151 # For histograms, we don't print the average data, only the _by_url.
152 if not data_type == 'histogram':
153 values = [i[0] for i in value_url_list]
154 self._PrintPerfResult(measurement, trace, values, units, data_type)
OLDNEW
« no previous file with comments | « tools/telemetry/telemetry/page/page_action.py ('k') | tools/telemetry/telemetry/page/page_benchmark_results_unittest.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698