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

Side by Side Diff: tools/run_benchmarks.py

Issue 395633012: Allow benchmarks to provide the standard deviation. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Review Created 6 years, 5 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
« no previous file with comments | « no previous file | tools/unittests/run_benchmarks_test.py » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 #!/usr/bin/env python 1 #!/usr/bin/env python
2 # Copyright 2014 the V8 project authors. All rights reserved. 2 # Copyright 2014 the V8 project authors. All rights reserved.
3 # Use of this source code is governed by a BSD-style license that can be 3 # Use of this source code is governed by a BSD-style license that can be
4 # found in the LICENSE file. 4 # found in the LICENSE file.
5 5
6 """ 6 """
7 Performance runner for d8. 7 Performance runner for d8.
8 8
9 Call e.g. with tools/run-benchmarks.py --arch ia32 some_suite.json 9 Call e.g. with tools/run-benchmarks.py --arch ia32 some_suite.json
10 10
(...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after
149 """Fake parent node with all default values.""" 149 """Fake parent node with all default values."""
150 def __init__(self): 150 def __init__(self):
151 super(DefaultSentinel, self).__init__() 151 super(DefaultSentinel, self).__init__()
152 self.binary = "d8" 152 self.binary = "d8"
153 self.run_count = 10 153 self.run_count = 10
154 self.path = [] 154 self.path = []
155 self.graphs = [] 155 self.graphs = []
156 self.flags = [] 156 self.flags = []
157 self.resources = [] 157 self.resources = []
158 self.results_regexp = None 158 self.results_regexp = None
159 self.stddev_regexp = None
159 self.units = "score" 160 self.units = "score"
160 161
161 162
162 class Graph(Node): 163 class Graph(Node):
163 """Represents a benchmark suite definition. 164 """Represents a benchmark suite definition.
164 165
165 Can either be a leaf or an inner node that provides default values. 166 Can either be a leaf or an inner node that provides default values.
166 """ 167 """
167 def __init__(self, suite, parent, arch): 168 def __init__(self, suite, parent, arch):
168 super(Graph, self).__init__() 169 super(Graph, self).__init__()
(...skipping 20 matching lines...) Expand all
189 # regexp and the current suite has none, a string place holder for the 190 # regexp and the current suite has none, a string place holder for the
190 # suite name is expected. 191 # suite name is expected.
191 # TODO(machenbach): Currently that makes only sense for the leaf level. 192 # TODO(machenbach): Currently that makes only sense for the leaf level.
192 # Multiple place holders for multiple levels are not supported. 193 # Multiple place holders for multiple levels are not supported.
193 if parent.results_regexp: 194 if parent.results_regexp:
194 regexp_default = parent.results_regexp % suite["name"] 195 regexp_default = parent.results_regexp % suite["name"]
195 else: 196 else:
196 regexp_default = None 197 regexp_default = None
197 self.results_regexp = suite.get("results_regexp", regexp_default) 198 self.results_regexp = suite.get("results_regexp", regexp_default)
198 199
200 # A similar regular expression for the standard deviation (optional).
201 if parent.stddev_regexp:
202 stddev_default = parent.stddev_regexp % suite["name"]
203 else:
204 stddev_default = None
205 self.stddev_regexp = suite.get("stddev_regexp", stddev_default)
206
199 207
200 class Trace(Graph): 208 class Trace(Graph):
201 """Represents a leaf in the benchmark suite tree structure. 209 """Represents a leaf in the benchmark suite tree structure.
202 210
203 Handles collection of measurements. 211 Handles collection of measurements.
204 """ 212 """
205 def __init__(self, suite, parent, arch): 213 def __init__(self, suite, parent, arch):
206 super(Trace, self).__init__(suite, parent, arch) 214 super(Trace, self).__init__(suite, parent, arch)
207 assert self.results_regexp 215 assert self.results_regexp
208 self.results = [] 216 self.results = []
209 self.errors = [] 217 self.errors = []
218 self.stddev = ""
210 219
211 def ConsumeOutput(self, stdout): 220 def ConsumeOutput(self, stdout):
212 try: 221 try:
213 self.results.append( 222 self.results.append(
214 re.search(self.results_regexp, stdout, re.M).group(1)) 223 re.search(self.results_regexp, stdout, re.M).group(1))
215 except: 224 except:
216 self.errors.append("Regexp \"%s\" didn't match for benchmark %s." 225 self.errors.append("Regexp \"%s\" didn't match for benchmark %s."
217 % (self.results_regexp, self.graphs[-1])) 226 % (self.results_regexp, self.graphs[-1]))
218 227
228 try:
229 if self.stddev_regexp and self.stddev:
230 self.errors.append("Benchmark %s should only run once since a stddev "
231 "is provided by the benchmark." % self.graphs[-1])
232 if self.stddev_regexp:
233 self.stddev = re.search(self.stddev_regexp, stdout, re.M).group(1)
234 except:
235 self.errors.append("Regexp \"%s\" didn't match for benchmark %s."
236 % (self.stddev_regexp, self.graphs[-1]))
237
219 def GetResults(self): 238 def GetResults(self):
220 return Results([{ 239 return Results([{
221 "graphs": self.graphs, 240 "graphs": self.graphs,
222 "units": self.units, 241 "units": self.units,
223 "results": self.results, 242 "results": self.results,
243 "stddev": self.stddev,
224 }], self.errors) 244 }], self.errors)
225 245
226 246
227 class Runnable(Graph): 247 class Runnable(Graph):
228 """Represents a runnable benchmark suite definition (i.e. has a main file). 248 """Represents a runnable benchmark suite definition (i.e. has a main file).
229 """ 249 """
230 @property 250 @property
231 def main(self): 251 def main(self):
232 return self._suite["main"] 252 return self._suite["main"]
233 253
(...skipping 158 matching lines...) Expand 10 before | Expand all | Expand 10 after
392 412
393 if options.json_test_results: 413 if options.json_test_results:
394 results.WriteToFile(options.json_test_results) 414 results.WriteToFile(options.json_test_results)
395 else: # pragma: no cover 415 else: # pragma: no cover
396 print results 416 print results
397 417
398 return min(1, len(results.errors)) 418 return min(1, len(results.errors))
399 419
400 if __name__ == "__main__": # pragma: no cover 420 if __name__ == "__main__": # pragma: no cover
401 sys.exit(Main(sys.argv[1:])) 421 sys.exit(Main(sys.argv[1:]))
OLDNEW
« no previous file with comments | « no previous file | tools/unittests/run_benchmarks_test.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698