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 collections | 4 import collections |
5 import logging | 5 import logging |
6 from collections import defaultdict | 6 from collections import defaultdict |
7 | 7 |
8 from telemetry.timeline import model as model_module | 8 from telemetry.timeline import model as model_module |
9 from telemetry.timeline import tracing_category_filter | 9 from telemetry.timeline import tracing_category_filter |
10 from telemetry.timeline import tracing_options | 10 from telemetry.timeline import tracing_options |
11 from telemetry.value import trace | 11 from telemetry.value import trace |
12 from telemetry.web_perf.metrics import timeline_based_metric | 12 from telemetry.web_perf.metrics import timeline_based_metric |
13 from telemetry.web_perf.metrics import blob_timeline | 13 from telemetry.web_perf.metrics import blob_timeline |
| 14 from telemetry.web_perf.metrics import webrtc_rendering_timeline |
14 from telemetry.web_perf.metrics import gpu_timeline | 15 from telemetry.web_perf.metrics import gpu_timeline |
15 from telemetry.web_perf.metrics import indexeddb_timeline | 16 from telemetry.web_perf.metrics import indexeddb_timeline |
16 from telemetry.web_perf.metrics import layout | 17 from telemetry.web_perf.metrics import layout |
17 from telemetry.web_perf.metrics import memory_timeline | 18 from telemetry.web_perf.metrics import memory_timeline |
18 from telemetry.web_perf.metrics import responsiveness_metric | 19 from telemetry.web_perf.metrics import responsiveness_metric |
19 from telemetry.web_perf.metrics import smoothness | 20 from telemetry.web_perf.metrics import smoothness |
20 from telemetry.web_perf.metrics import text_selection | 21 from telemetry.web_perf.metrics import text_selection |
21 from telemetry.web_perf import smooth_gesture_util | 22 from telemetry.web_perf import smooth_gesture_util |
22 from telemetry.web_perf import story_test | 23 from telemetry.web_perf import story_test |
23 from telemetry.web_perf import timeline_interaction_record as tir_module | 24 from telemetry.web_perf import timeline_interaction_record as tir_module |
(...skipping 17 matching lines...) Expand all Loading... |
41 # TODO(nednguyen): use discovery pattern to return all the instances of | 42 # TODO(nednguyen): use discovery pattern to return all the instances of |
42 # all TimelineBasedMetrics class in web_perf/metrics/ folder. | 43 # all TimelineBasedMetrics class in web_perf/metrics/ folder. |
43 # This cannot be done until crbug.com/460208 is fixed. | 44 # This cannot be done until crbug.com/460208 is fixed. |
44 return (smoothness.SmoothnessMetric(), | 45 return (smoothness.SmoothnessMetric(), |
45 responsiveness_metric.ResponsivenessMetric(), | 46 responsiveness_metric.ResponsivenessMetric(), |
46 layout.LayoutMetric(), | 47 layout.LayoutMetric(), |
47 gpu_timeline.GPUTimelineMetric(), | 48 gpu_timeline.GPUTimelineMetric(), |
48 blob_timeline.BlobTimelineMetric(), | 49 blob_timeline.BlobTimelineMetric(), |
49 memory_timeline.MemoryTimelineMetric(), | 50 memory_timeline.MemoryTimelineMetric(), |
50 text_selection.TextSelectionMetric(), | 51 text_selection.TextSelectionMetric(), |
51 indexeddb_timeline.IndexedDBTimelineMetric()) | 52 indexeddb_timeline.IndexedDBTimelineMetric(), |
| 53 webrtc_rendering_timeline.WebRtcRenderingTimelineMetric()) |
52 | 54 |
53 | 55 |
54 class InvalidInteractions(Exception): | 56 class InvalidInteractions(Exception): |
55 pass | 57 pass |
56 | 58 |
57 | 59 |
58 # TODO(nednguyen): Get rid of this results wrapper hack after we add interaction | 60 # TODO(nednguyen): Get rid of this results wrapper hack after we add interaction |
59 # record to telemetry value system (crbug.com/453109) | 61 # record to telemetry value system (crbug.com/453109) |
60 class ResultsWrapperInterface(object): | 62 class ResultsWrapperInterface(object): |
61 def __init__(self): | 63 def __init__(self): |
(...skipping 184 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
246 supported long term and to be removed when crbug.com/453109 is resolved. | 248 supported long term and to be removed when crbug.com/453109 is resolved. |
247 """ | 249 """ |
248 def __init__(self, options, results_wrapper=None): | 250 def __init__(self, options, results_wrapper=None): |
249 self._tbm_options = options | 251 self._tbm_options = options |
250 self._results_wrapper = results_wrapper or _TBMResultWrapper() | 252 self._results_wrapper = results_wrapper or _TBMResultWrapper() |
251 | 253 |
252 def WillRunStory(self, platform): | 254 def WillRunStory(self, platform): |
253 """Configure and start tracing.""" | 255 """Configure and start tracing.""" |
254 if not platform.tracing_controller.IsChromeTracingSupported(): | 256 if not platform.tracing_controller.IsChromeTracingSupported(): |
255 raise Exception('Not supported') | 257 raise Exception('Not supported') |
256 | |
257 platform.tracing_controller.Start(self._tbm_options.tracing_options, | 258 platform.tracing_controller.Start(self._tbm_options.tracing_options, |
258 self._tbm_options.category_filter) | 259 self._tbm_options.category_filter) |
259 | 260 |
260 def Measure(self, platform, results): | 261 def Measure(self, platform, results): |
261 """Collect all possible metrics and added them to results.""" | 262 """Collect all possible metrics and added them to results.""" |
262 trace_result = platform.tracing_controller.Stop() | 263 trace_result = platform.tracing_controller.Stop() |
263 results.AddValue(trace.TraceValue(results.current_page, trace_result)) | 264 results.AddValue(trace.TraceValue(results.current_page, trace_result)) |
264 model = model_module.TimelineModel(trace_result) | 265 model = model_module.TimelineModel(trace_result) |
265 threads_to_records_map = _GetRendererThreadsToInteractionRecordsMap(model) | 266 threads_to_records_map = _GetRendererThreadsToInteractionRecordsMap(model) |
266 if (len(threads_to_records_map.values()) == 0 and | 267 if (len(threads_to_records_map.values()) == 0 and |
267 self._tbm_options.tracing_options.enable_chrome_trace): | 268 self._tbm_options.tracing_options.enable_chrome_trace): |
268 raise story_test.Failure( | 269 raise story_test.Failure( |
269 'No timeline interaction records were recorded in the trace. ' | 270 'No timeline interaction records were recorded in the trace. ' |
270 'This could be caused by console.time() & console.timeEnd() execution' | 271 'This could be caused by console.time() & console.timeEnd() execution' |
271 ' failure or the tracing category specified doesn\'t include ' | 272 ' failure or the tracing category specified doesn\'t include ' |
272 'blink.console categories.') | 273 'blink.console categories.') |
273 for renderer_thread, interaction_records in ( | 274 for renderer_thread, interaction_records in ( |
274 threads_to_records_map.iteritems()): | 275 threads_to_records_map.iteritems()): |
275 meta_metrics = _TimelineBasedMetrics( | 276 meta_metrics = _TimelineBasedMetrics( |
276 model, renderer_thread, interaction_records, | 277 model, renderer_thread, interaction_records, |
277 self._results_wrapper, self._tbm_options.GetTimelineBasedMetrics()) | 278 self._results_wrapper, self._tbm_options.GetTimelineBasedMetrics()) |
278 meta_metrics.AddResults(results) | 279 meta_metrics.AddResults(results) |
279 | 280 |
280 def DidRunStory(self, platform): | 281 def DidRunStory(self, platform): |
281 """Clean up after running the story.""" | 282 """Clean up after running the story.""" |
282 if platform.tracing_controller.is_tracing_running: | 283 if platform.tracing_controller.is_tracing_running: |
283 platform.tracing_controller.Stop() | 284 platform.tracing_controller.Stop() |
OLD | NEW |