OLD | NEW |
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.timeline.model import TimelineModel | 7 from telemetry.timeline.model import TimelineModel |
8 from telemetry.page import page_measurement | 8 from telemetry.page import page_measurement |
9 from telemetry.page.actions import action_runner | 9 from telemetry.page.actions import action_runner |
10 from telemetry.value import list_of_scalar_values | 10 from telemetry.value import list_of_scalar_values |
11 from telemetry.value import scalar | 11 from telemetry.value import scalar |
12 from telemetry.web_perf import timeline_interaction_record as tir_module | 12 from telemetry.web_perf import timeline_interaction_record as tir_module |
13 from telemetry.web_perf.metrics import smoothness | 13 from telemetry.web_perf.metrics import smoothness |
14 | 14 |
15 | 15 |
16 RUN_SMOOTH_ACTIONS = 'RunSmoothAllActions' | 16 RUN_SMOOTH_ACTIONS = 'RunSmoothAllActions' |
17 | 17 |
| 18 # Descriptions for results from platform.GetRawDisplayFrameRateMeasurements(). |
| 19 DESCRIPTIONS = { |
| 20 'avg_surface_fps': 'Average frames per second as measured by the ' |
| 21 'platform\'s SurfaceFlinger.' |
| 22 } |
| 23 |
18 | 24 |
19 class MissingDisplayFrameRateError(page_measurement.MeasurementFailure): | 25 class MissingDisplayFrameRateError(page_measurement.MeasurementFailure): |
20 def __init__(self, name): | 26 def __init__(self, name): |
21 super(MissingDisplayFrameRateError, self).__init__( | 27 super(MissingDisplayFrameRateError, self).__init__( |
22 'Missing display frame rate metrics: ' + name) | 28 'Missing display frame rate metrics: ' + name) |
23 | 29 |
24 class SmoothnessController(object): | 30 class SmoothnessController(object): |
25 def __init__(self): | 31 def __init__(self): |
26 self._timeline_model = None | 32 self._timeline_model = None |
27 self._tracing_timeline_data = None | 33 self._tracing_timeline_data = None |
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
83 if run_smooth_actions_record is None: | 89 if run_smooth_actions_record is None: |
84 sys.stderr.write('Raw tracing data:\n') | 90 sys.stderr.write('Raw tracing data:\n') |
85 sys.stderr.write(repr(self._tracing_timeline_data.EventData())) | 91 sys.stderr.write(repr(self._tracing_timeline_data.EventData())) |
86 sys.stderr.write('\n') | 92 sys.stderr.write('\n') |
87 raise Exception('SmoothnessController failed to issue markers for the ' | 93 raise Exception('SmoothnessController failed to issue markers for the ' |
88 'whole interaction.') | 94 'whole interaction.') |
89 else: | 95 else: |
90 smooth_records = [run_smooth_actions_record] | 96 smooth_records = [run_smooth_actions_record] |
91 | 97 |
92 # Create an interaction_record for this legacy measurement. Since we don't | 98 # Create an interaction_record for this legacy measurement. Since we don't |
93 # wrap the results that is sent to smoothnes metric, the label will | 99 # wrap the results that are sent to smoothness metric, the label will |
94 # not be used. | 100 # not be used. |
95 smoothness_metric = smoothness.SmoothnessMetric() | 101 smoothness_metric = smoothness.SmoothnessMetric() |
96 smoothness_metric.AddResults( | 102 smoothness_metric.AddResults( |
97 self._timeline_model, renderer_thread, smooth_records, results) | 103 self._timeline_model, renderer_thread, smooth_records, results) |
98 if tab.browser.platform.IsRawDisplayFrameRateSupported(): | 104 if tab.browser.platform.IsRawDisplayFrameRateSupported(): |
99 for r in tab.browser.platform.GetRawDisplayFrameRateMeasurements(): | 105 for r in tab.browser.platform.GetRawDisplayFrameRateMeasurements(): |
100 if r.value is None: | 106 if r.value is None: |
101 raise MissingDisplayFrameRateError(r.name) | 107 raise MissingDisplayFrameRateError(r.name) |
102 if isinstance(r.value, list): | 108 if isinstance(r.value, list): |
103 results.AddValue(list_of_scalar_values.ListOfScalarValues( | 109 results.AddValue(list_of_scalar_values.ListOfScalarValues( |
104 results.current_page, r.name, r.unit, r.value)) | 110 results.current_page, r.name, r.unit, r.value, |
| 111 description=DESCRIPTIONS.get(r.name))) |
105 else: | 112 else: |
106 results.AddValue(scalar.ScalarValue( | 113 results.AddValue(scalar.ScalarValue( |
107 results.current_page, r.name, r.unit, r.value)) | 114 results.current_page, r.name, r.unit, r.value, |
| 115 description=DESCRIPTIONS.get(r.name))) |
108 | 116 |
109 def CleanUp(self, tab): | 117 def CleanUp(self, tab): |
110 if tab.browser.platform.IsRawDisplayFrameRateSupported(): | 118 if tab.browser.platform.IsRawDisplayFrameRateSupported(): |
111 tab.browser.platform.StopRawDisplayFrameRateMeasurement() | 119 tab.browser.platform.StopRawDisplayFrameRateMeasurement() |
112 if tab.browser.is_tracing_running: | 120 if tab.browser.is_tracing_running: |
113 tab.browser.StopTracing() | 121 tab.browser.StopTracing() |
OLD | NEW |