| 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 telemetry.core.platform import tracing_category_filter | 5 from telemetry.core.platform import tracing_category_filter |
| 6 from telemetry.core.platform import tracing_options | 6 from telemetry.core.platform import tracing_options |
| 7 from telemetry.page import action_runner | 7 from telemetry.page import action_runner |
| 8 from telemetry.page import page_test |
| 8 from telemetry.timeline.model import TimelineModel | 9 from telemetry.timeline.model import TimelineModel |
| 9 from telemetry.value import trace | 10 from telemetry.value import trace |
| 10 from telemetry.web_perf import smooth_gesture_util | 11 from telemetry.web_perf import smooth_gesture_util |
| 11 from telemetry.web_perf import timeline_interaction_record as tir_module | 12 from telemetry.web_perf import timeline_interaction_record as tir_module |
| 12 | 13 |
| 13 | 14 |
| 14 RUN_SMOOTH_ACTIONS = 'RunSmoothAllActions' | 15 RUN_SMOOTH_ACTIONS = 'RunSmoothAllActions' |
| 15 | 16 |
| 16 | 17 |
| 17 class TimelineController(object): | 18 class TimelineController(object): |
| 18 def __init__(self): | 19 def __init__(self, enable_auto_issuing_record=True): |
| 19 super(TimelineController, self).__init__() | 20 super(TimelineController, self).__init__() |
| 20 self.trace_categories = None | 21 self.trace_categories = None |
| 21 self._model = None | 22 self._model = None |
| 22 self._renderer_process = None | 23 self._renderer_process = None |
| 23 self._smooth_records = [] | 24 self._smooth_records = [] |
| 24 self._interaction = None | 25 self._interaction = None |
| 26 self._enable_auto_issuing_record = enable_auto_issuing_record |
| 25 | 27 |
| 26 def SetUp(self, page, tab): | 28 def SetUp(self, page, tab): |
| 27 """Starts gathering timeline data. | 29 """Starts gathering timeline data. |
| 28 | 30 |
| 29 """ | 31 """ |
| 30 # Resets these member variables incase this object is reused. | 32 # Resets these member variables incase this object is reused. |
| 31 self._model = None | 33 self._model = None |
| 32 self._renderer_process = None | 34 self._renderer_process = None |
| 33 if not tab.browser.platform.tracing_controller.IsChromeTracingSupported(): | 35 if not tab.browser.platform.tracing_controller.IsChromeTracingSupported(): |
| 34 raise Exception('Not supported') | 36 raise Exception('Not supported') |
| 35 category_filter = tracing_category_filter.TracingCategoryFilter( | 37 category_filter = tracing_category_filter.TracingCategoryFilter( |
| 36 filter_string=self.trace_categories) | 38 filter_string=self.trace_categories) |
| 37 for delay in page.GetSyntheticDelayCategories(): | 39 for delay in page.GetSyntheticDelayCategories(): |
| 38 category_filter.AddSyntheticDelay(delay) | 40 category_filter.AddSyntheticDelay(delay) |
| 39 options = tracing_options.TracingOptions() | 41 options = tracing_options.TracingOptions() |
| 40 options.enable_chrome_trace = True | 42 options.enable_chrome_trace = True |
| 41 tab.browser.platform.tracing_controller.Start(options, category_filter) | 43 tab.browser.platform.tracing_controller.Start(options, category_filter) |
| 42 | 44 |
| 43 def Start(self, tab): | 45 def Start(self, tab): |
| 44 # Start the smooth marker for all actions. | 46 # Start the smooth marker for all actions. |
| 45 runner = action_runner.ActionRunner(tab) | 47 runner = action_runner.ActionRunner(tab) |
| 46 self._interaction = runner.CreateInteraction( | 48 if self._enable_auto_issuing_record: |
| 47 RUN_SMOOTH_ACTIONS) | 49 self._interaction = runner.CreateInteraction( |
| 48 self._interaction.Begin() | 50 RUN_SMOOTH_ACTIONS) |
| 51 self._interaction.Begin() |
| 49 | 52 |
| 50 def Stop(self, tab, results): | 53 def Stop(self, tab, results): |
| 51 # End the smooth marker for all actions. | 54 # End the smooth marker for all actions. |
| 52 self._interaction.End() | 55 if self._enable_auto_issuing_record: |
| 56 self._interaction.End() |
| 53 # Stop tracing. | 57 # Stop tracing. |
| 54 timeline_data = tab.browser.platform.tracing_controller.Stop() | 58 timeline_data = tab.browser.platform.tracing_controller.Stop() |
| 55 results.AddValue(trace.TraceValue( | 59 results.AddValue(trace.TraceValue( |
| 56 results.current_page, timeline_data)) | 60 results.current_page, timeline_data)) |
| 57 self._model = TimelineModel(timeline_data) | 61 self._model = TimelineModel(timeline_data) |
| 58 self._renderer_process = self._model.GetRendererProcessFromTabId(tab.id) | 62 self._renderer_process = self._model.GetRendererProcessFromTabId(tab.id) |
| 59 renderer_thread = self.model.GetRendererThreadFromTabId(tab.id) | 63 renderer_thread = self.model.GetRendererThreadFromTabId(tab.id) |
| 60 | 64 |
| 61 run_smooth_actions_record = None | 65 run_smooth_actions_record = None |
| 62 self._smooth_records = [] | 66 self._smooth_records = [] |
| (...skipping 11 matching lines...) Expand all Loading... |
| 74 smooth_gesture_util.GetAdjustedInteractionIfContainGesture( | 78 smooth_gesture_util.GetAdjustedInteractionIfContainGesture( |
| 75 self.model, r)) | 79 self.model, r)) |
| 76 | 80 |
| 77 # If there is no other smooth records, we make measurements on time range | 81 # If there is no other smooth records, we make measurements on time range |
| 78 # marked by timeline_controller itself. | 82 # marked by timeline_controller itself. |
| 79 # TODO(nednguyen): when crbug.com/239179 is marked fixed, makes sure that | 83 # TODO(nednguyen): when crbug.com/239179 is marked fixed, makes sure that |
| 80 # page sets are responsible for issueing the markers themselves. | 84 # page sets are responsible for issueing the markers themselves. |
| 81 if len(self._smooth_records) == 0 and run_smooth_actions_record: | 85 if len(self._smooth_records) == 0 and run_smooth_actions_record: |
| 82 self._smooth_records = [run_smooth_actions_record] | 86 self._smooth_records = [run_smooth_actions_record] |
| 83 | 87 |
| 88 if len(self._smooth_records) == 0: |
| 89 raise page_test.Failure('No interaction record was created.') |
| 90 |
| 84 | 91 |
| 85 def CleanUp(self, tab): | 92 def CleanUp(self, tab): |
| 86 if tab.browser.platform.tracing_controller.is_tracing_running: | 93 if tab.browser.platform.tracing_controller.is_tracing_running: |
| 87 tab.browser.platform.tracing_controller.Stop() | 94 tab.browser.platform.tracing_controller.Stop() |
| 88 | 95 |
| 89 @property | 96 @property |
| 90 def model(self): | 97 def model(self): |
| 91 return self._model | 98 return self._model |
| 92 | 99 |
| 93 @property | 100 @property |
| 94 def renderer_process(self): | 101 def renderer_process(self): |
| 95 return self._renderer_process | 102 return self._renderer_process |
| 96 | 103 |
| 97 @property | 104 @property |
| 98 def smooth_records(self): | 105 def smooth_records(self): |
| 99 return self._smooth_records | 106 return self._smooth_records |
| OLD | NEW |