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

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

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

Powered by Google App Engine
This is Rietveld 408576698