Index: tools/perf/metrics/timeline.py |
diff --git a/tools/perf/metrics/timeline.py b/tools/perf/metrics/timeline.py |
index 9d95455341de578673dd921996d265ee16569694..e6bdaa26377a90d1b6add3c0177bafd4409cd501 100644 |
--- a/tools/perf/metrics/timeline.py |
+++ b/tools/perf/metrics/timeline.py |
@@ -2,91 +2,28 @@ |
# Use of this source code is governed by a BSD-style license that can be |
# found in the LICENSE file. |
import collections |
-import itertools |
from metrics import Metric |
-from telemetry.core.timeline.model import TimelineModel |
from telemetry.core.timeline import bounds |
-from telemetry.page import page_measurement |
- |
-# All tracing categories not disabled-by-default |
-DEFAULT_TRACE_CATEGORIES = None |
- |
-# Categories for absolute minimum overhead tracing. This contains no |
-# sub-traces of thread tasks, so it's only useful for capturing the |
-# cpu-time spent on threads (as well as needed benchmark traces) |
-MINIMAL_TRACE_CATEGORIES = ("toplevel," |
- "benchmark," |
- "webkit.console," |
- "trace_event_overhead") |
- |
-class MissingFramesError(page_measurement.MeasurementFailure): |
- def __init__(self): |
- super(MissingFramesError, self).__init__( |
- 'No frames found in trace. Unable to normalize results.') |
class TimelineMetric(Metric): |
- def __init__(self): |
+ def __init__(self, model=None, renderer_process=None, action_ranges=None): |
""" Initializes a TimelineMetric object. |
""" |
super(TimelineMetric, self).__init__() |
- self.trace_categories = DEFAULT_TRACE_CATEGORIES |
- self._model = None |
- self._renderer_process = None |
- self._actions = [] |
- self._action_ranges = [] |
- |
- def Start(self, page, tab): |
- """Starts gathering timeline data. |
- |
- """ |
- self._model = None |
- if not tab.browser.supports_tracing: |
- raise Exception('Not supported') |
- if self.trace_categories: |
- categories = [self.trace_categories] + \ |
- page.GetSyntheticDelayCategories() |
- else: |
- categories = page.GetSyntheticDelayCategories() |
- tab.browser.StartTracing(','.join(categories)) |
- |
- def Stop(self, page, tab): |
- timeline_data = tab.browser.StopTracing() |
- self._model = TimelineModel(timeline_data) |
- self._renderer_process = self._model.GetRendererProcessFromTab(tab) |
- self._action_ranges = [ action.GetActiveRangeOnTimeline(self._model) |
- for action in self._actions ] |
- # Make sure no action ranges overlap |
- for combo in itertools.combinations(self._action_ranges, 2): |
- assert not combo[0].Intersects(combo[1]) |
- |
- def AddActionToIncludeInMetric(self, action): |
- self._actions.append(action) |
- |
- @property |
- def model(self): |
- return self._model |
- |
- @model.setter |
- def model(self, model): |
self._model = model |
- |
- @property |
- def renderer_process(self): |
- return self._renderer_process |
- |
- @renderer_process.setter |
- def renderer_process(self, p): |
- self._renderer_process = p |
+ self._renderer_process = renderer_process |
+ self._action_ranges = action_ranges if action_ranges else [] |
def AddResults(self, tab, results): |
return |
class LoadTimesTimelineMetric(TimelineMetric): |
- def __init__(self): |
- super(LoadTimesTimelineMetric, self).__init__() |
+ def __init__(self, model=None, renderer_process=None, action_ranges=None): |
+ super(LoadTimesTimelineMetric, self).__init__(model, renderer_process, |
+ action_ranges) |
self.report_main_thread_only = True |
def AddResults(self, _, results): |
@@ -98,7 +35,7 @@ class LoadTimesTimelineMetric(TimelineMetric): |
events_by_name = collections.defaultdict(list) |
- for thread in self.renderer_process.threads.itervalues(): |
+ for thread in self._renderer_process.threads.itervalues(): |
if thread_filter and not thread.name in thread_filter: |
continue |
@@ -122,7 +59,7 @@ class LoadTimesTimelineMetric(TimelineMetric): |
results.Add(full_name + '_max', 'ms', biggest_jank) |
results.Add(full_name + '_avg', 'ms', total / len(times)) |
- for counter_name, counter in self.renderer_process.counters.iteritems(): |
+ for counter_name, counter in self._renderer_process.counters.iteritems(): |
total = sum(counter.totals) |
# Results objects cannot contain the '.' character, so remove that here. |
@@ -275,19 +212,13 @@ class ResultsForThread(object): |
class ThreadTimesTimelineMetric(TimelineMetric): |
- def __init__(self): |
- super(ThreadTimesTimelineMetric, self).__init__() |
+ def __init__(self, model=None, renderer_process=None, action_ranges=None): |
+ super(ThreadTimesTimelineMetric, self).__init__(model, renderer_process, |
+ action_ranges) |
# Minimal traces, for minimum noise in CPU-time measurements. |
- self.trace_categories = MINIMAL_TRACE_CATEGORIES |
self.results_to_report = AllThreads |
self.details_to_report = NoThreads |
- def Start(self, page, tab): |
- # We need the other traces in order to have any details to report. |
- if not self.details_to_report == NoThreads: |
- self.trace_categories = DEFAULT_TRACE_CATEGORIES |
- super(ThreadTimesTimelineMetric, self).Start(page, tab) |
- |
def CountSlices(self, slices, substring): |
count = 0 |
for event in slices: |