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

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

Issue 789363002: TimelineBasedMeasurement(object) instead of TimelineBasedMeasurement(page_test.PageTest) (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase. Created 5 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
OLDNEW
1 # Copyright 2014 The Chromium Authors. All rights reserved. 1 # Copyright 2014 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 import logging 5 import logging
6 import optparse 6 import optparse
7 import os 7 import os
8 import shutil 8 import shutil
9 import sys 9 import sys
10 import zipfile 10 import zipfile
11 11
12 from telemetry import decorators 12 from telemetry import decorators
13 from telemetry import page 13 from telemetry import page
14 from telemetry.core import browser_finder 14 from telemetry.core import browser_finder
15 from telemetry.core import command_line 15 from telemetry.core import command_line
16 from telemetry.core import util 16 from telemetry.core import util
17 from telemetry.user_story import user_story_runner 17 from telemetry.user_story import user_story_runner
18 from telemetry.page import page_set 18 from telemetry.page import page_set
19 from telemetry.page import page_test 19 from telemetry.page import page_test
20 from telemetry.page import test_expectations 20 from telemetry.page import test_expectations
21 from telemetry.results import results_options 21 from telemetry.results import results_options
22 from telemetry.util import cloud_storage 22 from telemetry.util import cloud_storage
23 from telemetry.util import exception_formatter 23 from telemetry.util import exception_formatter
24 from telemetry.web_perf import timeline_based_measurement
24 25
25 Disabled = decorators.Disabled 26 Disabled = decorators.Disabled
26 Enabled = decorators.Enabled 27 Enabled = decorators.Enabled
27 28
28 29
29 class InvalidOptionsError(Exception): 30 class InvalidOptionsError(Exception):
30 """Raised for invalid benchmark options.""" 31 """Raised for invalid benchmark options."""
31 pass 32 pass
32 33
33 34
34 class BenchmarkMetadata(object): 35 class BenchmarkMetadata(object):
35 def __init__(self, name, description=''): 36 def __init__(self, name, description=''):
36 self._name = name 37 self._name = name
37 self._description = description 38 self._description = description
38 39
39 @property 40 @property
40 def name(self): 41 def name(self):
41 return self._name 42 return self._name
42 43
43 @property 44 @property
44 def description(self): 45 def description(self):
45 return self._description 46 return self._description
46 47
47 48
48 class Benchmark(command_line.Command): 49 class Benchmark(command_line.Command):
49 """Base class for a Telemetry benchmark. 50 """Base class for a Telemetry benchmark.
50 51
51 A test packages a PageTest and a PageSet together. 52 A benchmark packages a measurement and a PageSet together.
53 Benchmarks default to using TBM unless you override the value of
54 Benchmark.test, or override the CreatePageTest method.
55
56 New benchmarks should override CreateUserStorySet.
52 """ 57 """
53 options = {} 58 options = {}
59 test = timeline_based_measurement.TimelineBasedMeasurement
54 60
55 def __init__(self, max_failures=None): 61 def __init__(self, max_failures=None):
56 """Creates a new Benchmark. 62 """Creates a new Benchmark.
57 63
58 Args: 64 Args:
59 max_failures: The number of user story run's failures before bailing 65 max_failures: The number of user story run's failures before bailing
60 from executing subsequent page runs. If None, we never bail. 66 from executing subsequent page runs. If None, we never bail.
61 """ 67 """
62 self._max_failures = max_failures 68 self._max_failures = max_failures
69 self._has_original_tbm_options = (
70 self.CreateTimelineBasedMeasurementOptions.__func__ ==
71 Benchmark.CreateTimelineBasedMeasurementOptions.__func__)
72 has_original_create_page_test = (
73 self.CreatePageTest.__func__ == Benchmark.CreatePageTest.__func__)
74 assert self._has_original_tbm_options or has_original_create_page_test, (
75 'Cannot override both CreatePageTest and '
76 'CreateTimelineBasedMeasurementOptions.')
63 77
64 @classmethod 78 @classmethod
65 def Name(cls): 79 def Name(cls):
66 name = cls.__module__.split('.')[-1] 80 name = cls.__module__.split('.')[-1]
67 if hasattr(cls, 'tag'): 81 if hasattr(cls, 'tag'):
68 name += '.' + cls.tag 82 name += '.' + cls.tag
69 if hasattr(cls, 'page_set'): 83 if hasattr(cls, 'page_set'):
70 name += '.' + cls.page_set.Name() 84 name += '.' + cls.page_set.Name()
71 return name 85 return name
72 86
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after
200 if os.path.exists(extracted_profile_dir_path): 214 if os.path.exists(extracted_profile_dir_path):
201 shutil.rmtree(extracted_profile_dir_path) 215 shutil.rmtree(extracted_profile_dir_path)
202 logging.error("Error extracting profile directory zip file: %s", e) 216 logging.error("Error extracting profile directory zip file: %s", e)
203 sys.exit(-1) 217 sys.exit(-1)
204 218
205 # Run with freshly extracted profile directory. 219 # Run with freshly extracted profile directory.
206 logging.info("Using profile archive directory: %s", 220 logging.info("Using profile archive directory: %s",
207 extracted_profile_dir_path) 221 extracted_profile_dir_path)
208 options.browser_options.profile_dir = extracted_profile_dir_path 222 options.browser_options.profile_dir = extracted_profile_dir_path
209 223
210 def CreatePageTest(self, options): # pylint: disable=W0613 224 def CreateTimelineBasedMeasurementOptions(self):
211 """Get the PageTest for this Benchmark. 225 """Return the TimelineBasedMeasurementOptions for this Benchmark.
212 226
213 By default, it will create a page test from the test's test attribute. 227 Override this method to configure a TimelineBasedMeasurement benchmark.
214 Override to generate a custom page test. 228 Otherwise, override CreatePageTest for PageTest tests. Do not override
229 both methods.
215 """ 230 """
216 if not hasattr(self, 'test'): 231 return timeline_based_measurement.Options()
217 raise NotImplementedError('This test has no "test" attribute.')
218 if not issubclass(self.test, page_test.PageTest):
219 raise TypeError('"%s" is not a PageTest.' % self.test.__name__)
220 return self.test()
221 232
222 def CreatePageSet(self, options): # pylint: disable=W0613 233 def CreatePageTest(self, options): # pylint: disable=unused-argument
234 """Return the PageTest for this Benchmark.
235
236 Override this method for PageTest tests.
237 Override, override CreateTimelineBasedMeasurementOptions to configure
238 TimelineBasedMeasurement tests. Do not override both methods.
239
240 Args:
241 options: a browser_options.BrowserFinderOptions instance
242 Returns:
243 |test()| if |test| is a PageTest class.
244 Otherwise, a TimelineBasedMeasurement instance.
245 """
246 is_page_test = issubclass(self.test, page_test.PageTest)
247 is_tbm = self.test == timeline_based_measurement.TimelineBasedMeasurement
248 if not is_page_test and not is_tbm:
249 raise TypeError('"%s" is not a PageTest or a TimelineBasedMeasurement.' %
250 self.test.__name__)
251 if is_page_test:
252 assert self._has_original_tbm_options, (
253 'Cannot override CreateTimelineBasedMeasurementOptions '
254 'with a PageTest.')
255 return self.test() # pylint: disable=no-value-for-parameter
256 return timeline_based_measurement.TimelineBasedMeasurement(
257 self.CreateTimelineBasedMeasurementOptions())
258
259 def CreatePageSet(self, options): # pylint: disable=unused-argument
223 """Get the page set this test will run on. 260 """Get the page set this test will run on.
224 261
225 By default, it will create a page set from the this test's page_set 262 By default, it will create a page set from the this test's page_set
226 attribute. Override to generate a custom page set. 263 attribute. Override to generate a custom page set.
227 """ 264 """
228 if not hasattr(self, 'page_set'): 265 if not hasattr(self, 'page_set'):
229 raise NotImplementedError('This test has no "page_set" attribute.') 266 raise NotImplementedError('This test has no "page_set" attribute.')
230 if not issubclass(self.page_set, page_set.PageSet): 267 if not issubclass(self.page_set, page_set.PageSet):
231 raise TypeError('"%s" is not a PageSet.' % self.page_set.__name__) 268 raise TypeError('"%s" is not a PageSet.' % self.page_set.__name__)
232 return self.page_set() 269 return self.page_set()
(...skipping 10 matching lines...) Expand all
243 """ 280 """
244 return test_expectations.TestExpectations() 281 return test_expectations.TestExpectations()
245 282
246 283
247 def AddCommandLineArgs(parser): 284 def AddCommandLineArgs(parser):
248 user_story_runner.AddCommandLineArgs(parser) 285 user_story_runner.AddCommandLineArgs(parser)
249 286
250 287
251 def ProcessCommandLineArgs(parser, args): 288 def ProcessCommandLineArgs(parser, args):
252 user_story_runner.ProcessCommandLineArgs(parser, args) 289 user_story_runner.ProcessCommandLineArgs(parser, args)
OLDNEW
« no previous file with comments | « tools/perf/measurements/measurement_smoke_test.py ('k') | tools/telemetry/telemetry/benchmark_unittest.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698