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

Side by Side Diff: bench/check_bench_regressions.py

Issue 172683002: Separates faster and slower bench alerts; sorts by delta. (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Created 6 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
OLDNEW
1 ''' 1 '''
2 Created on May 16, 2011 2 Created on May 16, 2011
3 3
4 @author: bungeman 4 @author: bungeman
5 ''' 5 '''
6 import bench_util 6 import bench_util
7 import getopt 7 import getopt
8 import httplib 8 import httplib
9 import itertools 9 import itertools
10 import json 10 import json
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after
127 elements = expectation.strip().split(',') 127 elements = expectation.strip().split(',')
128 if not elements[0] or elements[0].startswith('#'): 128 if not elements[0] or elements[0].startswith('#'):
129 continue 129 continue
130 if len(elements) != 5: 130 if len(elements) != 5:
131 raise Exception("Invalid expectation line format: %s" % 131 raise Exception("Invalid expectation line format: %s" %
132 expectation) 132 expectation)
133 bench_entry = elements[0] + ',' + elements[1] 133 bench_entry = elements[0] + ',' + elements[1]
134 if bench_entry in expectations: 134 if bench_entry in expectations:
135 raise Exception("Dup entries for bench expectation %s" % 135 raise Exception("Dup entries for bench expectation %s" %
136 bench_entry) 136 bench_entry)
137 # [<Bench_BmpConfig_TimeType>,<Platform-Alg>] -> (LB, UB) 137 # [<Bench_BmpConfig_TimeType>,<Platform-Alg>] -> (LB, UB, EXPECTED)
138 expectations[bench_entry] = (float(elements[-2]), 138 expectations[bench_entry] = (float(elements[-2]),
139 float(elements[-1])) 139 float(elements[-1]),
140 float(elements[-3]))
epoger 2014/02/19 18:51:08 Not new to this CL... but these are strange magic
benchen 2014/02/19 21:08:08 Done using the constant index approach, which is m
140 141
141 def check_expectations(lines, expectations, revision, key_suffix): 142 def check_expectations(lines, expectations, revision, key_suffix):
142 """Check if there are benches in the given revising out of range. 143 """Check if there are benches in the given revising out of range.
epoger 2014/02/19 18:51:08 TODO: document function arguments, return value, a
benchen 2014/02/19 21:08:08 Done.
143 """ 144 """
144 # The platform for this bot, to pass to the dashboard plot. 145 # The platform for this bot, to pass to the dashboard plot.
145 platform = key_suffix[ : key_suffix.rfind('-')] 146 platform = key_suffix[ : key_suffix.rfind('-')]
146 exceptions = [] 147 exceptions = {}
epoger 2014/02/19 18:51:08 Please document the structure of this dictionary.
benchen 2014/02/19 21:08:08 Done.
147 for line in lines: 148 for line in lines:
148 line_str = str(line) 149 line_str = str(line)
149 line_str = line_str[ : line_str.find('_{')] 150 line_str = line_str[ : line_str.find('_{')]
150 bench_platform_key = line_str + ',' + key_suffix 151 bench_platform_key = line_str + ',' + key_suffix
151 if bench_platform_key not in expectations: 152 if bench_platform_key not in expectations:
152 continue 153 continue
153 this_bench_value = lines[line] 154 this_bench_value = lines[line]
154 this_min, this_max = expectations[bench_platform_key] 155 this_min, this_max, this_expected = expectations[bench_platform_key]
155 if this_bench_value < this_min or this_bench_value > this_max: 156 if this_bench_value < this_min or this_bench_value > this_max:
156 exception = 'Bench %s value %s out of range [%s, %s].' % ( 157 off_ratio = this_bench_value / this_expected
157 bench_platform_key, this_bench_value, this_min, this_max) 158 exception = 'Bench %s off range [%s, %s] (%s vs %s, %s%%).' % (
epoger 2014/02/19 18:51:08 off -> out of
benchen 2014/02/19 21:08:08 Done.
158 exceptions.append(exception) 159 bench_platform_key, this_min, this_max, this_bench_value,
160 this_expected, (off_ratio - 1) * 100)
161 exceptions.setdefault(off_ratio, []).append(exception)
159 if exceptions: 162 if exceptions:
160 raise Exception('Bench values out of range:\n' + 163 ratios = exceptions.keys()
161 '\n'.join(exceptions)) 164 ratios.sort(reverse=True)
165 outputs = ['Bench values out of range:', '', 'Slower:']
166 for ratio in ratios:
167 if ratio < 1 and 'Faster:' not in outputs:
epoger 2014/02/19 18:51:08 I think it might be cleaner to build two expectati
benchen 2014/02/19 21:08:08 Done.
168 outputs.extend(['', 'Faster:'])
169 outputs.extend(exceptions[ratio])
170
171 raise Exception('\n'.join(outputs))
162 172
163 def main(): 173 def main():
164 """Parses command line and checks bench expectations.""" 174 """Parses command line and checks bench expectations."""
165 try: 175 try:
166 opts, _ = getopt.getopt(sys.argv[1:], 176 opts, _ = getopt.getopt(sys.argv[1:],
167 "a:b:d:e:r:", 177 "a:b:d:e:r:",
168 "default-setting=") 178 "default-setting=")
169 except getopt.GetoptError, err: 179 except getopt.GetoptError, err:
170 print str(err) 180 print str(err)
171 usage() 181 usage()
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
209 219
210 bench_dict = create_bench_dict(data_points) 220 bench_dict = create_bench_dict(data_points)
211 221
212 if bench_expectations: 222 if bench_expectations:
213 check_expectations(bench_dict, bench_expectations, rev, 223 check_expectations(bench_dict, bench_expectations, rev,
214 platform_and_alg) 224 platform_and_alg)
215 225
216 226
217 if __name__ == "__main__": 227 if __name__ == "__main__":
218 main() 228 main()
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698