| Index: tools/perf/metrics/timeline.py
|
| diff --git a/tools/perf/metrics/timeline.py b/tools/perf/metrics/timeline.py
|
| index 3442cab15b01b00604f22a2541f4df74825a0c7f..333c5bd8ec9b76ae0869f5789fa5bae7c436dcfd 100644
|
| --- a/tools/perf/metrics/timeline.py
|
| +++ b/tools/perf/metrics/timeline.py
|
| @@ -11,6 +11,16 @@ from telemetry.page import page_measurement
|
| TRACING_MODE = 'tracing-mode'
|
| TIMELINE_MODE = 'timeline-mode'
|
|
|
| +# 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):
|
| @@ -24,6 +34,7 @@ class TimelineMetric(Metric):
|
| """
|
| super(TimelineMetric, self).__init__()
|
| assert mode in (TRACING_MODE, TIMELINE_MODE)
|
| + self.trace_categories = DEFAULT_TRACE_CATEGORIES
|
| self._mode = mode
|
| self._model = None
|
| self._renderer_process = None
|
| @@ -39,7 +50,7 @@ class TimelineMetric(Metric):
|
| if self._mode == TRACING_MODE:
|
| if not tab.browser.supports_tracing:
|
| raise Exception('Not supported')
|
| - tab.browser.StartTracing()
|
| + tab.browser.StartTracing(self.trace_categories)
|
| else:
|
| assert self._mode == TIMELINE_MODE
|
| tab.StartTimelineRecording()
|
| @@ -204,7 +215,8 @@ def ThreadCpuTimeResultName(thread_category):
|
| return "thread_" + thread_category + "_cpu_time_per_frame"
|
|
|
| def ThreadDetailResultName(thread_category, detail):
|
| - return "thread_" + thread_category + "|" + detail
|
| + detail_sanitized = detail.replace('.','_')
|
| + return "thread_" + thread_category + "|" + detail_sanitized
|
|
|
|
|
| class ResultsForThread(object):
|
| @@ -252,12 +264,8 @@ class ResultsForThread(object):
|
| self.toplevel_slices.extend(self.SlicesInActions(thread.toplevel_slices))
|
|
|
| def AddResults(self, num_frames, results):
|
| - clock_report_name = ThreadTimeResultName(self.name)
|
| - cpu_report_name = ThreadCpuTimeResultName(self.name)
|
| - clock_per_frame = (float(self.clock_time) / num_frames) if num_frames else 0
|
| - cpu_per_frame = (float(self.cpu_time) / num_frames) if num_frames else 0
|
| - results.Add(clock_report_name, 'ms', clock_per_frame)
|
| - results.Add(cpu_report_name, 'ms', cpu_per_frame)
|
| + cpu_per_frame = (float(self.cpu_time) / num_frames) if num_frames else 0
|
| + results.Add(ThreadCpuTimeResultName(self.name), 'ms', cpu_per_frame)
|
|
|
| def AddDetailedResults(self, num_frames, results):
|
| slices_by_category = collections.defaultdict(list)
|
| @@ -281,9 +289,17 @@ class ResultsForThread(object):
|
| class ThreadTimesTimelineMetric(TimelineMetric):
|
| def __init__(self):
|
| super(ThreadTimesTimelineMetric, self).__init__(TRACING_MODE)
|
| + # 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:
|
|
|