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 | 4 |
5 from collections import defaultdict | 5 from collections import defaultdict |
6 | 6 |
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.page import page_test | 9 from telemetry.page import page_test |
10 from telemetry.timeline import model as model_module | 10 from telemetry.timeline import model as model_module |
11 from telemetry.value import trace | 11 from telemetry.value import trace |
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 fast_metric |
13 from telemetry.web_perf.metrics import responsiveness_metric | 14 from telemetry.web_perf.metrics import responsiveness_metric |
14 from telemetry.web_perf.metrics import smoothness | 15 from telemetry.web_perf.metrics import smoothness |
15 | 16 |
16 # TimelineBasedMeasurement considers all instrumentation as producing a single | 17 # TimelineBasedMeasurement considers all instrumentation as producing a single |
17 # timeline. But, depending on the amount of instrumentation that is enabled, | 18 # timeline. But, depending on the amount of instrumentation that is enabled, |
18 # overhead increases. The user of the measurement must therefore chose between | 19 # overhead increases. The user of the measurement must therefore chose between |
19 # a few levels of instrumentation. | 20 # a few levels of instrumentation. |
20 NO_OVERHEAD_LEVEL = 'no-overhead' | 21 NO_OVERHEAD_LEVEL = 'no-overhead' |
| 22 V8_OVERHEAD_LEVEL = 'v8-overhead' |
21 MINIMAL_OVERHEAD_LEVEL = 'minimal-overhead' | 23 MINIMAL_OVERHEAD_LEVEL = 'minimal-overhead' |
22 DEBUG_OVERHEAD_LEVEL = 'debug-overhead' | 24 DEBUG_OVERHEAD_LEVEL = 'debug-overhead' |
23 | 25 |
24 ALL_OVERHEAD_LEVELS = [ | 26 ALL_OVERHEAD_LEVELS = [ |
25 NO_OVERHEAD_LEVEL, | 27 NO_OVERHEAD_LEVEL, |
| 28 V8_OVERHEAD_LEVEL, |
26 MINIMAL_OVERHEAD_LEVEL, | 29 MINIMAL_OVERHEAD_LEVEL, |
27 DEBUG_OVERHEAD_LEVEL | 30 DEBUG_OVERHEAD_LEVEL |
28 ] | 31 ] |
29 | 32 |
30 DEFAULT_METRICS = { | 33 DEFAULT_METRICS = { |
| 34 tir_module.IS_FAST: fast_metric.FastMetric, |
31 tir_module.IS_SMOOTH: smoothness.SmoothnessMetric, | 35 tir_module.IS_SMOOTH: smoothness.SmoothnessMetric, |
32 tir_module.IS_RESPONSIVE: responsiveness_metric.ResponsivenessMetric, | 36 tir_module.IS_RESPONSIVE: responsiveness_metric.ResponsivenessMetric, |
33 } | 37 } |
34 | 38 |
35 class InvalidInteractions(Exception): | 39 class InvalidInteractions(Exception): |
36 pass | 40 pass |
37 | 41 |
38 | 42 |
39 def _GetMetricsFromFlags(record_custom_flags): | 43 def _GetMetricsFromFlags(record_custom_flags): |
40 flags_set = set(record_custom_flags) | 44 flags_set = set(record_custom_flags) |
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
131 Benchmark.CreateTimelineBasedMeasurementOptions. | 135 Benchmark.CreateTimelineBasedMeasurementOptions. |
132 """ | 136 """ |
133 | 137 |
134 def __init__(self, overhead_level=NO_OVERHEAD_LEVEL, | 138 def __init__(self, overhead_level=NO_OVERHEAD_LEVEL, |
135 get_metrics_from_flags_callback=_GetMetricsFromFlags): | 139 get_metrics_from_flags_callback=_GetMetricsFromFlags): |
136 """As the amount of instrumentation increases, so does the overhead. | 140 """As the amount of instrumentation increases, so does the overhead. |
137 The user of the measurement chooses the overhead level that is appropriate, | 141 The user of the measurement chooses the overhead level that is appropriate, |
138 and the tracing is filtered accordingly. | 142 and the tracing is filtered accordingly. |
139 | 143 |
140 overhead_level: Can either be a custom TracingCategoryFilter object or | 144 overhead_level: Can either be a custom TracingCategoryFilter object or |
141 one of NO_OVERHEAD_LEVEL, MINIMAL_OVERHEAD_LEVEL or | 145 one of NO_OVERHEAD_LEVEL, V8_OVERHEAD_LEVEL, MINIMAL_OVERHEAD_LEVEL, |
142 DEBUG_OVERHEAD_LEVEL. | 146 or DEBUG_OVERHEAD_LEVEL. The v8 overhead level is a temporary solution |
| 147 that may be removed. |
143 get_metrics_from_flags_callback: Callback function which returns a | 148 get_metrics_from_flags_callback: Callback function which returns a |
144 a list of metrics based on timeline record flags. See the default | 149 a list of metrics based on timeline record flags. See the default |
145 _GetMetricsFromFlags() as an example. | 150 _GetMetricsFromFlags() as an example. |
146 """ | 151 """ |
147 if (not isinstance(overhead_level, | 152 if (not isinstance(overhead_level, |
148 tracing_category_filter.TracingCategoryFilter) and | 153 tracing_category_filter.TracingCategoryFilter) and |
149 overhead_level not in ALL_OVERHEAD_LEVELS): | 154 overhead_level not in ALL_OVERHEAD_LEVELS): |
150 raise Exception("Overhead level must be a TracingCategoryFilter object" | 155 raise Exception("Overhead level must be a TracingCategoryFilter object" |
151 " or valid overhead level string." | 156 " or valid overhead level string." |
152 " Given overhead level: %s" % overhead_level) | 157 " Given overhead level: %s" % overhead_level) |
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
212 | 217 |
213 if isinstance(self._tbm_options.overhead_level, | 218 if isinstance(self._tbm_options.overhead_level, |
214 tracing_category_filter.TracingCategoryFilter): | 219 tracing_category_filter.TracingCategoryFilter): |
215 category_filter = self._tbm_options.overhead_level | 220 category_filter = self._tbm_options.overhead_level |
216 else: | 221 else: |
217 assert self._tbm_options.overhead_level in ALL_OVERHEAD_LEVELS, ( | 222 assert self._tbm_options.overhead_level in ALL_OVERHEAD_LEVELS, ( |
218 "Invalid TBM Overhead Level: %s" % self._tbm_options.overhead_level) | 223 "Invalid TBM Overhead Level: %s" % self._tbm_options.overhead_level) |
219 | 224 |
220 if self._tbm_options.overhead_level == NO_OVERHEAD_LEVEL: | 225 if self._tbm_options.overhead_level == NO_OVERHEAD_LEVEL: |
221 category_filter = tracing_category_filter.CreateNoOverheadFilter() | 226 category_filter = tracing_category_filter.CreateNoOverheadFilter() |
| 227 # TODO(ernstm): Remove this overhead level when benchmark relevant v8 |
| 228 # events become available in the 'benchmark' category. |
| 229 elif self._tbm_options.overhead_level == V8_OVERHEAD_LEVEL: |
| 230 category_filter = tracing_category_filter.CreateNoOverheadFilter() |
| 231 category_filter.AddIncludedCategory('v8') |
222 elif self._tbm_options.overhead_level == MINIMAL_OVERHEAD_LEVEL: | 232 elif self._tbm_options.overhead_level == MINIMAL_OVERHEAD_LEVEL: |
223 category_filter = tracing_category_filter.CreateMinimalOverheadFilter() | 233 category_filter = tracing_category_filter.CreateMinimalOverheadFilter() |
224 else: | 234 else: |
225 category_filter = tracing_category_filter.CreateDebugOverheadFilter() | 235 category_filter = tracing_category_filter.CreateDebugOverheadFilter() |
226 | 236 |
227 for new_category_filter in self._tbm_options.extra_category_filters: | 237 for new_category_filter in self._tbm_options.extra_category_filters: |
228 category_filter.AddIncludedCategory(new_category_filter) | 238 category_filter.AddIncludedCategory(new_category_filter) |
229 | 239 |
230 # TODO(slamm): Move synthetic_delay_categories to the TBM options. | 240 # TODO(slamm): Move synthetic_delay_categories to the TBM options. |
231 for delay in synthetic_delay_categories or []: | 241 for delay in synthetic_delay_categories or []: |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
269 tracing_controller, page.GetSyntheticDelayCategories()) | 279 tracing_controller, page.GetSyntheticDelayCategories()) |
270 | 280 |
271 def ValidateAndMeasurePage(self, page, tab, results): | 281 def ValidateAndMeasurePage(self, page, tab, results): |
272 """Collect all possible metrics and added them to results.""" | 282 """Collect all possible metrics and added them to results.""" |
273 tracing_controller = tab.browser.platform.tracing_controller | 283 tracing_controller = tab.browser.platform.tracing_controller |
274 self._measurement.Measure(tracing_controller, results) | 284 self._measurement.Measure(tracing_controller, results) |
275 | 285 |
276 def CleanUpAfterPage(self, page, tab): | 286 def CleanUpAfterPage(self, page, tab): |
277 tracing_controller = tab.browser.platform.tracing_controller | 287 tracing_controller = tab.browser.platform.tracing_controller |
278 self._measurement.DidRunUserStory(tracing_controller) | 288 self._measurement.DidRunUserStory(tracing_controller) |
OLD | NEW |