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

Unified Diff: tools/telemetry/telemetry/web_perf/timeline_based_measurement.py

Issue 1371403004: CL for perf tryjob on mac Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 3 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 side-by-side diff with in-line comments
Download patch
Index: tools/telemetry/telemetry/web_perf/timeline_based_measurement.py
diff --git a/tools/telemetry/telemetry/web_perf/timeline_based_measurement.py b/tools/telemetry/telemetry/web_perf/timeline_based_measurement.py
index 3c80ccdd943531704b817612450cdf1a0eed3cb9..3305ab00828551efcfe2cbc414d841067ed5b956 100644
--- a/tools/telemetry/telemetry/web_perf/timeline_based_measurement.py
+++ b/tools/telemetry/telemetry/web_perf/timeline_based_measurement.py
@@ -4,10 +4,8 @@
import collections
from collections import defaultdict
+from telemetry.web_perf import tracing_based_measurement
from telemetry.timeline import model as model_module
-from telemetry.timeline import tracing_category_filter
-from telemetry.timeline import tracing_options
-from telemetry.value import trace
from telemetry.web_perf.metrics import timeline_based_metric
from telemetry.web_perf.metrics import blob_timeline
from telemetry.web_perf.metrics import gpu_timeline
@@ -21,21 +19,6 @@ from telemetry.web_perf import smooth_gesture_util
from telemetry.web_perf import story_test
from telemetry.web_perf import timeline_interaction_record as tir_module
-# TimelineBasedMeasurement considers all instrumentation as producing a single
-# timeline. But, depending on the amount of instrumentation that is enabled,
-# overhead increases. The user of the measurement must therefore chose between
-# a few levels of instrumentation.
-NO_OVERHEAD_LEVEL = 'no-overhead'
-MINIMAL_OVERHEAD_LEVEL = 'minimal-overhead'
-DEBUG_OVERHEAD_LEVEL = 'debug-overhead'
-
-ALL_OVERHEAD_LEVELS = [
- NO_OVERHEAD_LEVEL,
- MINIMAL_OVERHEAD_LEVEL,
- DEBUG_OVERHEAD_LEVEL
-]
-
-
def _GetAllTimelineBasedMetrics():
# TODO(nednguyen): use discovery pattern to return all the instances of
# all TimelineBasedMetrics class in web_perf/metrics/ folder.
@@ -140,7 +123,7 @@ class _TimelineBasedMetrics(object):
interactions, wrapped_results)
-class Options(object):
+class Options(tracing_based_measurement.Options):
"""A class to be used to configure TimelineBasedMeasurement.
This is created and returned by
@@ -151,55 +134,11 @@ class Options(object):
To customize your metric needs, use SetTimelineBasedMetrics().
"""
- def __init__(self, overhead_level=NO_OVERHEAD_LEVEL):
- """As the amount of instrumentation increases, so does the overhead.
- The user of the measurement chooses the overhead level that is appropriate,
- and the tracing is filtered accordingly.
-
- overhead_level: Can either be a custom TracingCategoryFilter object or
- one of NO_OVERHEAD_LEVEL, MINIMAL_OVERHEAD_LEVEL or
- DEBUG_OVERHEAD_LEVEL.
- """
- self._category_filter = None
- if isinstance(overhead_level,
- tracing_category_filter.TracingCategoryFilter):
- self._category_filter = overhead_level
- elif overhead_level in ALL_OVERHEAD_LEVELS:
- if overhead_level == NO_OVERHEAD_LEVEL:
- self._category_filter = tracing_category_filter.CreateNoOverheadFilter()
- elif overhead_level == MINIMAL_OVERHEAD_LEVEL:
- self._category_filter = (
- tracing_category_filter.CreateMinimalOverheadFilter())
- else:
- self._category_filter = (
- tracing_category_filter.CreateDebugOverheadFilter())
- else:
- raise Exception("Overhead level must be a TracingCategoryFilter object"
- " or valid overhead level string."
- " Given overhead level: %s" % overhead_level)
-
- self._tracing_options = tracing_options.TracingOptions()
- self._tracing_options.enable_chrome_trace = True
- self._tracing_options.enable_platform_display_trace = True
+ def __init__(self,
+ overhead_level=tracing_based_measurement.NO_OVERHEAD_LEVEL):
+ super(Options, self).__init__(overhead_level)
self._timeline_based_metrics = _GetAllTimelineBasedMetrics()
-
- def ExtendTraceCategoryFilter(self, filters):
- for new_category_filter in filters:
- self._category_filter.AddIncludedCategory(new_category_filter)
-
- @property
- def category_filter(self):
- return self._category_filter
-
- @property
- def tracing_options(self):
- return self._tracing_options
-
- @tracing_options.setter
- def tracing_options(self, value):
- self._tracing_options = value
-
def SetTimelineBasedMetrics(self, metrics):
assert isinstance(metrics, collections.Iterable)
for m in metrics:
@@ -210,7 +149,8 @@ class Options(object):
return self._timeline_based_metrics
-class TimelineBasedMeasurement(story_test.StoryTest):
+class TimelineBasedMeasurement(
+ tracing_based_measurement.TracingBasedMeasurement):
"""Collects multiple metrics based on their interaction records.
A timeline based measurement shifts the burden of what metrics to collect onto
@@ -240,25 +180,15 @@ class TimelineBasedMeasurement(story_test.StoryTest):
supported long term and to be removed when crbug.com/453109 is resolved.
"""
def __init__(self, options, results_wrapper=None):
- self._tbm_options = options
+ super(TimelineBasedMeasurement, self).__init__(options)
self._results_wrapper = results_wrapper or _TBMResultWrapper()
- def WillRunStory(self, platform):
- """Configure and start tracing."""
- if not platform.tracing_controller.IsChromeTracingSupported():
- raise Exception('Not supported')
-
- platform.tracing_controller.Start(self._tbm_options.tracing_options,
- self._tbm_options.category_filter)
-
- def Measure(self, platform, results):
+ def ComputeMetricsForTrace(self, trace_result, results):
"""Collect all possible metrics and added them to results."""
- trace_result = platform.tracing_controller.Stop()
- results.AddValue(trace.TraceValue(results.current_page, trace_result))
model = model_module.TimelineModel(trace_result)
threads_to_records_map = _GetRendererThreadsToInteractionRecordsMap(model)
if (len(threads_to_records_map.values()) == 0 and
- self._tbm_options.tracing_options.enable_chrome_trace):
+ self._options.tracing_options.enable_chrome_trace):
raise story_test.Failure(
'No timeline interaction records were recorded in the trace. '
'This could be caused by console.time() & console.timeEnd() execution'
@@ -268,10 +198,6 @@ class TimelineBasedMeasurement(story_test.StoryTest):
threads_to_records_map.iteritems()):
meta_metrics = _TimelineBasedMetrics(
model, renderer_thread, interaction_records,
- self._results_wrapper, self._tbm_options.GetTimelineBasedMetrics())
+ self._results_wrapper,
+ self._options.GetTimelineBasedMetrics())
meta_metrics.AddResults(results)
-
- def DidRunStory(self, platform):
- """Clean up after running the story."""
- if platform.tracing_controller.is_tracing_running:
- platform.tracing_controller.Stop()

Powered by Google App Engine
This is Rietveld 408576698