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

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

Issue 809753002: Revert of telemetry: Clean up SurfaceFlinger statistics (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years 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
« no previous file with comments | « build/android/surface_stats.py ('k') | tools/perf/measurements/smoothness_unittest.py » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 import sys 4 import sys
5 5
6 from measurements import smooth_gesture_util 6 from measurements import smooth_gesture_util
7 from telemetry.core.platform import tracing_category_filter 7 from telemetry.core.platform import tracing_category_filter
8 from telemetry.core.platform import tracing_options 8 from telemetry.core.platform import tracing_options
9 from telemetry.timeline.model import TimelineModel 9 from telemetry.timeline.model import TimelineModel
10 from telemetry.page import page_test 10 from telemetry.page import page_test
11 from telemetry.page.actions import action_runner 11 from telemetry.page.actions import action_runner
12 from telemetry.value import list_of_scalar_values 12 from telemetry.value import list_of_scalar_values
13 from telemetry.value import scalar 13 from telemetry.value import scalar
14 from telemetry.value import trace 14 from telemetry.value import trace
15 from telemetry.web_perf import timeline_interaction_record as tir_module 15 from telemetry.web_perf import timeline_interaction_record as tir_module
16 from telemetry.web_perf.metrics import smoothness 16 from telemetry.web_perf.metrics import smoothness
17 17
18 18
19 RUN_SMOOTH_ACTIONS = 'RunSmoothAllActions' 19 RUN_SMOOTH_ACTIONS = 'RunSmoothAllActions'
20 20
21 # Descriptions for results from platform.GetRawDisplayFrameRateMeasurements().
22 DESCRIPTIONS = {
23 'avg_surface_fps': 'Average frames per second as measured by the '
24 'platform\'s SurfaceFlinger.'
25 }
26
27
28 class MissingDisplayFrameRateError(page_test.MeasurementFailure):
29 def __init__(self, name):
30 super(MissingDisplayFrameRateError, self).__init__(
31 'Missing display frame rate metrics: ' + name)
21 32
22 class SmoothnessController(object): 33 class SmoothnessController(object):
23 def __init__(self): 34 def __init__(self):
24 self._timeline_model = None 35 self._timeline_model = None
25 self._tracing_timeline_data = None 36 self._tracing_timeline_data = None
26 self._interaction = None 37 self._interaction = None
27 self._surface_flinger_timeline_data = None
28 38
29 def SetUp(self, page, tab): 39 def SetUp(self, page, tab):
30 # FIXME: Remove webkit.console when blink.console lands in chromium and 40 # FIXME: Remove webkit.console when blink.console lands in chromium and
31 # the ref builds are updated. crbug.com/386847 41 # the ref builds are updated. crbug.com/386847
32 custom_categories = ['webkit.console', 'blink.console', 'benchmark'] 42 custom_categories = ['webkit.console', 'blink.console', 'benchmark']
33 custom_categories += page.GetSyntheticDelayCategories() 43 custom_categories += page.GetSyntheticDelayCategories()
34 category_filter = tracing_category_filter.TracingCategoryFilter() 44 category_filter = tracing_category_filter.TracingCategoryFilter()
35 for c in custom_categories: 45 for c in custom_categories:
36 category_filter.AddIncludedCategory(c) 46 category_filter.AddIncludedCategory(c)
37 options = tracing_options.TracingOptions() 47 options = tracing_options.TracingOptions()
38 options.enable_chrome_trace = True 48 options.enable_chrome_trace = True
39 tab.browser.platform.tracing_controller.Start(options, category_filter, 60) 49 tab.browser.platform.tracing_controller.Start(options, category_filter, 60)
40 if tab.browser.platform.IsDisplayTracingSupported(): 50 if tab.browser.platform.IsRawDisplayFrameRateSupported():
41 tab.browser.platform.StartDisplayTracing(); 51 tab.browser.platform.StartRawDisplayFrameRateMeasurement()
42 52
43 def Start(self, tab): 53 def Start(self, tab):
44 # Start the smooth marker for all smooth actions. 54 # Start the smooth marker for all smooth actions.
45 runner = action_runner.ActionRunner(tab) 55 runner = action_runner.ActionRunner(tab)
46 self._interaction = runner.BeginInteraction( 56 self._interaction = runner.BeginInteraction(
47 RUN_SMOOTH_ACTIONS, is_smooth=True) 57 RUN_SMOOTH_ACTIONS, is_smooth=True)
48 58
49 def Stop(self, tab): 59 def Stop(self, tab):
50 # End the smooth marker for all smooth actions. 60 # End the smooth marker for all smooth actions.
51 self._interaction.End() 61 self._interaction.End()
52 # Stop tracing for smoothness metric. 62 # Stop tracing for smoothness metric.
53 if tab.browser.platform.IsDisplayTracingSupported(): 63 if tab.browser.platform.IsRawDisplayFrameRateSupported():
54 self._surface_flinger_timeline_data = \ 64 tab.browser.platform.StopRawDisplayFrameRateMeasurement()
55 tab.browser.platform.StopDisplayTracing()
56 self._tracing_timeline_data = tab.browser.platform.tracing_controller.Stop() 65 self._tracing_timeline_data = tab.browser.platform.tracing_controller.Stop()
57 timeline_data = [self._tracing_timeline_data]
58 if self._surface_flinger_timeline_data:
59 timeline_data.append(self._surface_flinger_timeline_data)
60 self._timeline_model = TimelineModel( 66 self._timeline_model = TimelineModel(
61 timeline_data=timeline_data) 67 timeline_data=self._tracing_timeline_data)
62 68
63 def AddResults(self, tab, results): 69 def AddResults(self, tab, results):
64 # Add results of smoothness metric. This computes the smoothness metric for 70 # Add results of smoothness metric. This computes the smoothness metric for
65 # the time ranges of gestures, if there is at least one, else the the time 71 # the time ranges of gestures, if there is at least one, else the the time
66 # ranges from the first action to the last action. 72 # ranges from the first action to the last action.
67 results.AddValue(trace.TraceValue( 73 results.AddValue(trace.TraceValue(
68 results.current_page, self._tracing_timeline_data)) 74 results.current_page, self._tracing_timeline_data))
69 renderer_thread = self._timeline_model.GetRendererThreadFromTabId( 75 renderer_thread = self._timeline_model.GetRendererThreadFromTabId(
70 tab.id) 76 tab.id)
71 run_smooth_actions_record = None 77 run_smooth_actions_record = None
(...skipping 24 matching lines...) Expand all
96 raise Exception('SmoothnessController failed to issue markers for the ' 102 raise Exception('SmoothnessController failed to issue markers for the '
97 'whole interaction.') 103 'whole interaction.')
98 else: 104 else:
99 smooth_records = [run_smooth_actions_record] 105 smooth_records = [run_smooth_actions_record]
100 106
101 # Create an interaction_record for this legacy measurement. Since we don't 107 # Create an interaction_record for this legacy measurement. Since we don't
102 # wrap the results that are sent to smoothness metric, the label will 108 # wrap the results that are sent to smoothness metric, the label will
103 # not be used. 109 # not be used.
104 smoothness_metric = smoothness.SmoothnessMetric() 110 smoothness_metric = smoothness.SmoothnessMetric()
105 smoothness_metric.AddResults( 111 smoothness_metric.AddResults(
106 self._timeline_model, renderer_thread, smooth_records, results) 112 self._timeline_model, renderer_thread, smooth_records, results)
113 if tab.browser.platform.IsRawDisplayFrameRateSupported():
114 for r in tab.browser.platform.GetRawDisplayFrameRateMeasurements():
115 if r.value is None:
116 raise MissingDisplayFrameRateError(r.name)
117 if isinstance(r.value, list):
118 results.AddValue(list_of_scalar_values.ListOfScalarValues(
119 results.current_page, r.name, r.unit, r.value,
120 description=DESCRIPTIONS.get(r.name)))
121 else:
122 results.AddValue(scalar.ScalarValue(
123 results.current_page, r.name, r.unit, r.value,
124 description=DESCRIPTIONS.get(r.name)))
107 125
108 def CleanUp(self, tab): 126 def CleanUp(self, tab):
109 if tab.browser.platform.IsDisplayTracingSupported(): 127 if tab.browser.platform.IsRawDisplayFrameRateSupported():
110 tab.browser.platform.StopDisplayTracing() 128 tab.browser.platform.StopRawDisplayFrameRateMeasurement()
111 if tab.browser.platform.tracing_controller.is_tracing_running: 129 if tab.browser.platform.tracing_controller.is_tracing_running:
112 tab.browser.platform.tracing_controller.Stop() 130 tab.browser.platform.tracing_controller.Stop()
OLDNEW
« no previous file with comments | « build/android/surface_stats.py ('k') | tools/perf/measurements/smoothness_unittest.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698