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

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

Issue 2965383002: WIP: Add support for additional flag-specified tracing categories. (Closed)
Patch Set: Created 3 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
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 optparse 5 import optparse
6 6
7 from telemetry import decorators 7 from telemetry import decorators
8 from telemetry.internal import story_runner 8 from telemetry.internal import story_runner
9 from telemetry.internal.util import command_line 9 from telemetry.internal.util import command_line
10 from telemetry.page import legacy_page_test 10 from telemetry.page import legacy_page_test
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
65 """Creates a new Benchmark. 65 """Creates a new Benchmark.
66 66
67 Args: 67 Args:
68 max_failures: The number of story run's failures before bailing 68 max_failures: The number of story run's failures before bailing
69 from executing subsequent page runs. If None, we never bail. 69 from executing subsequent page runs. If None, we never bail.
70 """ 70 """
71 self._expectations = None 71 self._expectations = None
72 self._max_failures = max_failures 72 self._max_failures = max_failures
73 self._has_original_tbm_options = ( 73 self._has_original_tbm_options = (
74 self.CreateTimelineBasedMeasurementOptions.__func__ == 74 self.CreateTimelineBasedMeasurementOptions.__func__ ==
75 Benchmark.CreateTimelineBasedMeasurementOptions.__func__) 75 Benchmark.CreateTimelineBasedMeasurementOptions.__func__ or
76 self.CreateBaseTimelineBasedMeasurementOptions.__func__ ==
77 Benchmark.CreateBaseTimelineBasedMeasurementOptions.__func__)
76 has_original_create_page_test = ( 78 has_original_create_page_test = (
77 self.CreatePageTest.__func__ == Benchmark.CreatePageTest.__func__) 79 self.CreatePageTest.__func__ == Benchmark.CreatePageTest.__func__)
78 assert self._has_original_tbm_options or has_original_create_page_test, ( 80 assert self._has_original_tbm_options or has_original_create_page_test, (
79 'Cannot override both CreatePageTest and ' 81 'Cannot override both CreatePageTest and '
80 'CreateTimelineBasedMeasurementOptions.') 82 'CreateBaseTimelineBasedMeasurementOptions.')
81 83
82 # pylint: disable=unused-argument 84 # pylint: disable=unused-argument
83 @classmethod 85 @classmethod
84 def ShouldDisable(cls, possible_browser): 86 def ShouldDisable(cls, possible_browser):
85 """Override this method to disable a benchmark under specific conditions. 87 """Override this method to disable a benchmark under specific conditions.
86 88
87 Supports logic too complex for simple Enabled and Disabled decorators. 89 Supports logic too complex for simple Enabled and Disabled decorators.
88 Decorators are still respected in cases where this function returns False. 90 Decorators are still respected in cases where this function returns False.
89 """ 91 """
90 return False 92 return False
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after
221 223
222 def GetOwnership(self): 224 def GetOwnership(self):
223 """Returns an Ownership Diagnostic containing the benchmark's information. 225 """Returns an Ownership Diagnostic containing the benchmark's information.
224 226
225 Returns: 227 Returns:
226 Diagnostic with the benchmark's owners' e-mails and component name 228 Diagnostic with the benchmark's owners' e-mails and component name
227 """ 229 """
228 return histogram.Ownership(decorators.GetEmails(self), 230 return histogram.Ownership(decorators.GetEmails(self),
229 decorators.GetComponent(self)) 231 decorators.GetComponent(self))
230 232
233 @decorators.Deprecated(
234 2017, 9, 1, 'Use CreateBaseTimelineBasedMeasurementOptions instead.')
231 def CreateTimelineBasedMeasurementOptions(self): 235 def CreateTimelineBasedMeasurementOptions(self):
232 """Return the TimelineBasedMeasurementOptions for this Benchmark. 236 """See CreateBaseTimelineBasedMeasurementOptions."""
237 return self.CreateBaseTimelineBasedMeasurementOptions()
233 238
234 Override this method to configure a TimelineBasedMeasurement benchmark. 239 def CreateBaseTimelineBasedMeasurementOptions(self):
charliea (OOO until 10-5) 2017/07/07 20:06:59 I think this could use clarification on what "base
235 Otherwise, override CreatePageTest for PageTest tests. Do not override 240 """Return the base TimelineBasedMeasurementOptions for this Benchmark.
236 both methods. 241
242 Additional chrome and atrace categories can be appended when running the
243 benchmark with the --extra-chrome-categories and --extra-atrace-categories
244 flags.
245
246 Override this method to configure a TimelineBasedMeasurement benchmark. If
247 this is not a TimelineBasedMeasurement benchmark, override CreatePageTest
248 for PageTest tests. Do not override both methods.
237 """ 249 """
238 return timeline_based_measurement.Options() 250 return timeline_based_measurement.Options()
239 251
252 def _GetTimelineBasedMeasurementOptions(self, options):
253 """Return all timeline based measurements for the curren benchmark run.
254
255 This includes the benchmark-configured measurements in
256 CreateBaseTimelineBasedMeasurementOptions as well as the user-flag-
257 configured options from --extra-chrome-categories and
258 --extra-atrace-categories.
259 """
260 # TODO(sullivan): the benchmark options should all be configured in
261 # CreateBaseTimelineBasedMeasurementOptions. Remove references to
262 # CreateTimelineBasedMeasurementOptions when it is fully deprecated.
263 # In the short term, if the benchmark overrides
264 # CreateTimelineBasedMeasurementOptions use the overridden version,
265 # otherwise call CreateBaseTimelineBasedMeasurementOptions.
266 # https://github.com/catapult-project/catapult/issues/3450
267 tbm_options = None
268 if (self.CreateTimelineBasedMeasurementOptions.__func__ !=
269 Benchmark.CreateTimelineBasedMeasurementOptions.__func__):
270 tbm_options = self.CreateTimelineBasedMeasurementOptions()
271 else:
272 tbm_options = self.CreateBaseTimelineBasedMeasurementOptions()
273 if options.extra_chrome_categories:
274 assert tbm_options.enable_chrome_trace, (
275 'This benchmark does not support Chrome tracing.')
sullivan 2017/07/07 14:58:47 Copied this from the bug comment. Big question I h
charliea (OOO until 10-5) 2017/07/07 20:06:59 One thing that jumps out to me is that it's not cl
nednguyen 2017/07/07 20:07:50 I think most benchmark that support Chrome tracing
276 tbm_options.chrome_trace_config.category_filter.AddFilterString(
sullivan 2017/07/07 14:58:47 Also copied this from the bug comment. Any reason
charliea (OOO until 10-5) 2017/07/07 20:06:59 My understanding was that the filter string was th
nednguyen 2017/07/07 20:07:50 To avoid explosion number of flags. I think the pe
277 options.extra_chrome_categories)
278 if options.extra_atrace_categories:
279 assert tbm_options.enable_atrace_trace, (
280 'This benchmark does not support atrace.')
sullivan 2017/07/07 14:58:47 Same question about enabling atrace.
nednguyen 2017/07/07 20:07:50 Same as above
281 tbm_options.atrace_config.categories.append(
282 options.extra_atrace_categories.split(','))
283 return tbm_options
284
285
240 def CreatePageTest(self, options): # pylint: disable=unused-argument 286 def CreatePageTest(self, options): # pylint: disable=unused-argument
241 """Return the PageTest for this Benchmark. 287 """Return the PageTest for this Benchmark.
242 288
243 Override this method for PageTest tests. 289 Override this method for PageTest tests.
244 Override, override CreateTimelineBasedMeasurementOptions to configure 290 Override, CreateBaseTimelineBasedMeasurementOptions to configure
245 TimelineBasedMeasurement tests. Do not override both methods. 291 TimelineBasedMeasurement tests. Do not override both methods.
246 292
247 Args: 293 Args:
248 options: a browser_options.BrowserFinderOptions instance 294 options: a browser_options.BrowserFinderOptions instance
249 Returns: 295 Returns:
250 |test()| if |test| is a PageTest class. 296 |test()| if |test| is a PageTest class.
251 Otherwise, a TimelineBasedMeasurement instance. 297 Otherwise, a TimelineBasedMeasurement instance.
252 """ 298 """
253 is_page_test = issubclass(self.test, legacy_page_test.LegacyPageTest) 299 is_page_test = issubclass(self.test, legacy_page_test.LegacyPageTest)
254 is_tbm = self.test == timeline_based_measurement.TimelineBasedMeasurement 300 is_tbm = self.test == timeline_based_measurement.TimelineBasedMeasurement
255 if not is_page_test and not is_tbm: 301 if not is_page_test and not is_tbm:
256 raise TypeError('"%s" is not a PageTest or a TimelineBasedMeasurement.' % 302 raise TypeError('"%s" is not a PageTest or a TimelineBasedMeasurement.' %
257 self.test.__name__) 303 self.test.__name__)
258 if is_page_test: 304 if is_page_test:
259 assert self._has_original_tbm_options, ( 305 assert self._has_original_tbm_options, (
260 'Cannot override CreateTimelineBasedMeasurementOptions ' 306 'Cannot override CreateBaseTimelineBasedMeasurementOptions '
261 'with a PageTest.') 307 'with a PageTest.')
262 return self.test() # pylint: disable=no-value-for-parameter 308 return self.test() # pylint: disable=no-value-for-parameter
263 309
264 opts = self.CreateTimelineBasedMeasurementOptions() 310 opts = self._GetTimelineBasedMeasurementOptions(options)
265 self.SetupTraceRerunOptions(options, opts) 311 self.SetupTraceRerunOptions(options, opts)
266 return timeline_based_measurement.TimelineBasedMeasurement(opts) 312 return timeline_based_measurement.TimelineBasedMeasurement(opts)
267 313
268 def CreateStorySet(self, options): 314 def CreateStorySet(self, options):
269 """Creates the instance of StorySet used to run the benchmark. 315 """Creates the instance of StorySet used to run the benchmark.
270 316
271 Can be overridden by subclasses. 317 Can be overridden by subclasses.
272 """ 318 """
273 del options # unused 319 del options # unused
274 # TODO(aiolos, nednguyen, eakufner): replace class attribute page_set with 320 # TODO(aiolos, nednguyen, eakufner): replace class attribute page_set with
(...skipping 29 matching lines...) Expand all
304 """ 350 """
305 return expectations.StoryExpectations() 351 return expectations.StoryExpectations()
306 352
307 353
308 def AddCommandLineArgs(parser): 354 def AddCommandLineArgs(parser):
309 story_runner.AddCommandLineArgs(parser) 355 story_runner.AddCommandLineArgs(parser)
310 356
311 357
312 def ProcessCommandLineArgs(parser, args): 358 def ProcessCommandLineArgs(parser, args):
313 story_runner.ProcessCommandLineArgs(parser, args) 359 story_runner.ProcessCommandLineArgs(parser, args)
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698