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

Side by Side Diff: tools/perf/measurements/smoothness.py

Issue 23902027: telemetry: Make trace profiler work with trace-based benchmarks. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 7 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 unified diff | Download patch
OLDNEW
1 # Copyright (c) 2013 The Chromium Authors. All rights reserved. 1 # Copyright (c) 2013 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 from metrics import loading 4 from metrics import loading
5 from metrics import smoothness 5 from metrics import smoothness
6 from metrics.gpu_rendering_stats import GpuRenderingStats 6 from metrics.gpu_rendering_stats import GpuRenderingStats
7 from telemetry.page import page_measurement 7 from telemetry.page import page_measurement
8 8
9 9
10 class DidNotScrollException(page_measurement.MeasurementFailure): 10 class DidNotScrollException(page_measurement.MeasurementFailure):
(...skipping 25 matching lines...) Expand all
36 36
37 def CustomizeBrowserOptions(self, options): 37 def CustomizeBrowserOptions(self, options):
38 smoothness.SmoothnessMetrics.CustomizeBrowserOptions(options) 38 smoothness.SmoothnessMetrics.CustomizeBrowserOptions(options)
39 if self.force_enable_threaded_compositing: 39 if self.force_enable_threaded_compositing:
40 options.AppendExtraBrowserArgs('--enable-threaded-compositing') 40 options.AppendExtraBrowserArgs('--enable-threaded-compositing')
41 41
42 def CanRunForPage(self, page): 42 def CanRunForPage(self, page):
43 return hasattr(page, 'smoothness') 43 return hasattr(page, 'smoothness')
44 44
45 def WillRunAction(self, page, tab, action): 45 def WillRunAction(self, page, tab, action):
46 # TODO(ernstm): remove 'webkit' category when 46 # We don't need to start tracing, if a trace profiler is already running.
47 # https://codereview.chromium.org/23848006/ has landed. 47 # Note that all trace event categories are enabled in this case, which
48 tab.browser.StartTracing('webkit,webkit.console,benchmark', 60) 48 # increases the risk of a trace buffer overflow.
49 if self.options.profiler != 'trace':
50 tab.browser.StartTracing('webkit.console,benchmark', 60)
49 if tab.browser.platform.IsRawDisplayFrameRateSupported(): 51 if tab.browser.platform.IsRawDisplayFrameRateSupported():
50 tab.browser.platform.StartRawDisplayFrameRateMeasurement() 52 tab.browser.platform.StartRawDisplayFrameRateMeasurement()
51 self._metrics = smoothness.SmoothnessMetrics(tab) 53 self._metrics = smoothness.SmoothnessMetrics(tab)
52 if action.CanBeBound(): 54 if action.CanBeBound():
53 self._metrics.BindToAction(action) 55 self._metrics.BindToAction(action)
54 else: 56 else:
55 self._metrics.Start() 57 self._metrics.Start()
56 58
57 def DidRunAction(self, page, tab, action): 59 def DidRunAction(self, page, tab, action):
58 if tab.browser.platform.IsRawDisplayFrameRateSupported(): 60 if tab.browser.platform.IsRawDisplayFrameRateSupported():
59 tab.browser.platform.StopRawDisplayFrameRateMeasurement() 61 tab.browser.platform.StopRawDisplayFrameRateMeasurement()
60 if not action.CanBeBound(): 62 if not action.CanBeBound():
61 self._metrics.Stop() 63 self._metrics.Stop()
64 # Always stop tracing at this point. If a trace profiler is running, it will
65 # be stopped here.
62 tab.browser.StopTracing() 66 tab.browser.StopTracing()
63 67
64 def FindTimelineMarker(self, timeline): 68 def FindTimelineMarker(self, timeline):
65 events = [s for 69 events = [s for
66 s in timeline.GetAllEventsOfName( 70 s in timeline.GetAllEventsOfName(
67 smoothness.TIMELINE_MARKER) 71 smoothness.TIMELINE_MARKER)
68 if s.parent_slice == None] 72 if s.parent_slice == None]
69 if len(events) != 1: 73 if len(events) != 1:
70 raise MissingTimelineMarker() 74 raise MissingTimelineMarker()
71 return events[0] 75 return events[0]
72 76
73 def MeasurePage(self, page, tab, results): 77 def MeasurePage(self, page, tab, results):
74 rendering_stats_deltas = self._metrics.deltas 78 rendering_stats_deltas = self._metrics.deltas
75 79
76 if not (rendering_stats_deltas['numFramesSentToScreen'] > 0): 80 if not (rendering_stats_deltas['numFramesSentToScreen'] > 0):
77 raise DidNotScrollException() 81 raise DidNotScrollException()
78 82
79 loading.LoadingMetric().AddResults(tab, results) 83 loading.LoadingMetric().AddResults(tab, results)
80 84
81 smoothness.CalcFirstPaintTimeResults(results, tab) 85 smoothness.CalcFirstPaintTimeResults(results, tab)
82 86
83 timeline = tab.browser.GetTraceResultAndReset().AsTimelineModel() 87 # Fetch the results without resetting, if a trace profiler is running. The
88 # profiler needs to read the results later on.
89 if self.options.profiler == 'trace':
90 timeline = tab.browser.GetTraceResult().AsTimelineModel()
91 else:
92 timeline = tab.browser.GetTraceResultAndReset().AsTimelineModel()
84 timeline_marker = self.FindTimelineMarker(timeline) 93 timeline_marker = self.FindTimelineMarker(timeline)
85 benchmark_stats = GpuRenderingStats(timeline_marker, 94 benchmark_stats = GpuRenderingStats(timeline_marker,
86 rendering_stats_deltas, 95 rendering_stats_deltas,
87 self._metrics.is_using_gpu_benchmarking) 96 self._metrics.is_using_gpu_benchmarking)
88 smoothness.CalcResults(benchmark_stats, results) 97 smoothness.CalcResults(benchmark_stats, results)
89 98
90 if self.options.report_all_results: 99 if self.options.report_all_results:
91 for k, v in rendering_stats_deltas.iteritems(): 100 for k, v in rendering_stats_deltas.iteritems():
92 results.Add(k, '', v) 101 results.Add(k, '', v)
93 102
94 if tab.browser.platform.IsRawDisplayFrameRateSupported(): 103 if tab.browser.platform.IsRawDisplayFrameRateSupported():
95 for r in tab.browser.platform.GetRawDisplayFrameRateMeasurements(): 104 for r in tab.browser.platform.GetRawDisplayFrameRateMeasurements():
96 if r.value is None: 105 if r.value is None:
97 raise MissingDisplayFrameRate(r.name) 106 raise MissingDisplayFrameRate(r.name)
98 results.Add(r.name, r.unit, r.value) 107 results.Add(r.name, r.unit, r.value)
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698