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 measurements import PageTestMeasurement |
5 from telemetry.core.platform import tracing_category_filter | 6 from telemetry.core.platform import tracing_category_filter |
6 from telemetry.core.platform import tracing_options | 7 from telemetry.core.platform import tracing_options |
7 from telemetry.timeline.model import TimelineModel | 8 from telemetry.timeline.model import TimelineModel |
8 from telemetry.page import page_test | |
9 from telemetry.util import statistics | 9 from telemetry.util import statistics |
10 from telemetry.value import scalar | 10 from telemetry.value import scalar |
11 | 11 |
12 _CATEGORIES = ['webkit.console', | 12 _CATEGORIES = ['webkit.console', |
13 'blink.console', | 13 'blink.console', |
14 'benchmark', | 14 'benchmark', |
15 'toplevel', | 15 'toplevel', |
16 'blink', | 16 'blink', |
17 'cc', | 17 'cc', |
18 'v8'] | 18 'v8'] |
19 | 19 |
20 class TaskExecutionTime(page_test.PageTest): | 20 class TaskExecutionTime(PageTestMeasurement): |
21 | 21 |
22 _TIME_OUT_IN_SECONDS = 60 | 22 _TIME_OUT_IN_SECONDS = 60 |
23 _NUMBER_OF_RESULTS_TO_DISPLAY = 10 | 23 _NUMBER_OF_RESULTS_TO_DISPLAY = 10 |
24 | 24 |
25 def __init__(self): | 25 def __init__(self): |
26 super(TaskExecutionTime, self).__init__('RunSmoothness') | 26 super(TaskExecutionTime, self).__init__('RunSmoothness') |
27 self._renderer_thread = None | 27 self._renderer_thread = None |
28 | 28 |
29 def WillNavigateToPage(self, page, tab): | 29 def WillNavigateToPage(self, page, tab): |
30 category_filter = tracing_category_filter.TracingCategoryFilter() | 30 category_filter = tracing_category_filter.TracingCategoryFilter() |
31 | 31 |
32 for category in _CATEGORIES: | 32 for category in _CATEGORIES: |
33 category_filter.AddIncludedCategory(category) | 33 category_filter.AddIncludedCategory(category) |
34 | 34 |
35 options = tracing_options.TracingOptions() | 35 options = tracing_options.TracingOptions() |
36 options.enable_chrome_trace = True | 36 options.enable_chrome_trace = True |
37 | 37 |
38 tab.browser.platform.tracing_controller.Start( | 38 tab.browser.platform.tracing_controller.Start( |
39 options, category_filter, self._TIME_OUT_IN_SECONDS) | 39 options, category_filter, self._TIME_OUT_IN_SECONDS) |
40 | 40 |
41 def DidRunActions(self, page, tab): | 41 def DidRunActions(self, page, tab): |
42 timeline_data = tab.browser.platform.tracing_controller.Stop() | 42 timeline_data = tab.browser.platform.tracing_controller.Stop() |
43 timeline_model = TimelineModel(timeline_data=timeline_data) | 43 timeline_model = TimelineModel(timeline_data=timeline_data) |
44 self._renderer_thread = timeline_model.GetRendererThreadFromTabId(tab.id) | 44 self._renderer_thread = timeline_model.GetRendererThreadFromTabId(tab.id) |
45 | 45 |
46 def ValidateAndMeasurePage(self, page, tab, results): | 46 def ValidateAndMeasurePage(self, page, tab, results): |
| 47 super(TaskExecutionTime, self).ValidateAndMeasurePage(page, tab, results) |
| 48 |
47 tasks = TaskExecutionTime.GetTasks(self._renderer_thread.parent) | 49 tasks = TaskExecutionTime.GetTasks(self._renderer_thread.parent) |
48 | 50 |
49 sorted_tasks = sorted(tasks, | 51 sorted_tasks = sorted(tasks, |
50 key=lambda slice: slice.median_self_duration, reverse=True) | 52 key=lambda slice: slice.median_self_duration, reverse=True) |
51 | 53 |
52 for task in sorted_tasks[:self.GetExpectedResultCount()]: | 54 for task in sorted_tasks[:self.GetExpectedResultCount()]: |
53 results.AddValue(scalar.ScalarValue( | 55 results.AddValue(scalar.ScalarValue( |
54 results.current_page, | 56 results.current_page, |
55 task.key, | 57 task.key, |
56 'ms', | 58 'ms', |
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
116 if key in dictionary: | 118 if key in dictionary: |
117 dictionary[key].Update( | 119 dictionary[key].Update( |
118 self_duration, total_duration, depth, parent) | 120 self_duration, total_duration, depth, parent) |
119 else: | 121 else: |
120 dictionary[key] = SliceData( | 122 dictionary[key] = SliceData( |
121 key, self_duration, total_duration, depth, parent) | 123 key, self_duration, total_duration, depth, parent) |
122 | 124 |
123 # Process sub slices recursively | 125 # Process sub slices recursively |
124 for sub_slice in task_slice.sub_slices: | 126 for sub_slice in task_slice.sub_slices: |
125 ProcessTasksForSlice(dictionary, sub_slice, depth + 1, parent) | 127 ProcessTasksForSlice(dictionary, sub_slice, depth + 1, parent) |
OLD | NEW |