Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(9)

Side by Side Diff: tools/perf/metrics/v8_gc_times_metric.py

Issue 1400083003: Convert V8GCTimes measurement to timeline based measurement. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix copyright date Created 5 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 # Copyright 2015 The Chromium Authors. All rights reserved. 1 # Copyright 2015 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.page import page_test
6 from telemetry.timeline.model import TimelineModel
7 from telemetry.timeline import tracing_category_filter
8 from telemetry.timeline import tracing_options
9 from telemetry.util import statistics 5 from telemetry.util import statistics
10 from telemetry.value import scalar 6 from telemetry.value import scalar
7 from telemetry.web_perf.metrics import timeline_based_metric
11 8
12 9
13 class V8GCTimes(page_test.PageTest): 10 class V8GCTimesMetric(timeline_based_metric.TimelineBasedMetric):
14
15 _TIME_OUT_IN_SECONDS = 60
16 _CATEGORIES = ['blink.console',
17 'renderer.scheduler',
18 'v8',
19 'webkit.console']
20 _RENDERER_MAIN_THREAD = 'CrRendererMain' 11 _RENDERER_MAIN_THREAD = 'CrRendererMain'
21 _IDLE_TASK_PARENT = 'SingleThreadIdleTaskRunner::RunTask' 12 _IDLE_TASK_PARENT = 'SingleThreadIdleTaskRunner::RunTask'
22 13
23 def __init__(self): 14 def __init__(self):
24 super(V8GCTimes, self).__init__() 15 super(V8GCTimesMetric, self).__init__()
25 16
26 def WillNavigateToPage(self, page, tab): 17 def AddResults(self, model, renderer_thread, interaction_records, results):
27 category_filter = tracing_category_filter.TracingCategoryFilter() 18 renderer_process = renderer_thread.parent
28
29 for category in self._CATEGORIES:
30 category_filter.AddIncludedCategory(category)
31
32 options = tracing_options.TracingOptions()
33 options.enable_chrome_trace = True
34
35 tab.browser.platform.tracing_controller.Start(
36 options, category_filter, self._TIME_OUT_IN_SECONDS)
37
38 def ValidateAndMeasurePage(self, page, tab, results):
39 trace_data = tab.browser.platform.tracing_controller.Stop()
40 timeline_model = TimelineModel(trace_data)
41 renderer_process = timeline_model.GetRendererProcessFromTabId(tab.id)
42 self._AddV8MetricsToResults(renderer_process, results) 19 self._AddV8MetricsToResults(renderer_process, results)
43 20
44 def DidRunPage(self, platform):
45 if platform.tracing_controller.is_tracing_running:
46 platform.tracing_controller.Stop()
47
48 def _AddV8MetricsToResults(self, process, results): 21 def _AddV8MetricsToResults(self, process, results):
49 if process is None: 22 if process is None:
50 return 23 return
51 24
52 for thread in process.threads.values(): 25 for thread in process.threads.values():
53 if thread.name != self._RENDERER_MAIN_THREAD: 26 if thread.name != self._RENDERER_MAIN_THREAD:
54 continue 27 continue
55 28
56 self._AddV8EventStatsToResults(thread, results) 29 self._AddV8EventStatsToResults(thread, results)
57 self._AddCpuTimeStatsToResults(thread, results) 30 self._AddCpuTimeStatsToResults(thread, results)
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after
182 for v8_event_stat in v8_event_stats_list: 155 for v8_event_stat in v8_event_stats_list:
183 if v8_event_stat.src_event_name == event_name: 156 if v8_event_stat.src_event_name == event_name:
184 return v8_event_stat 157 return v8_event_stat
185 return None 158 return None
186 159
187 160
188 def _ParentIdleTask(event): 161 def _ParentIdleTask(event):
189 parent = event.parent_slice 162 parent = event.parent_slice
190 while parent: 163 while parent:
191 # pylint: disable=protected-access 164 # pylint: disable=protected-access
192 if parent.name == V8GCTimes._IDLE_TASK_PARENT: 165 if parent.name == V8GCTimesMetric._IDLE_TASK_PARENT:
193 return parent 166 return parent
194 parent = parent.parent_slice 167 parent = parent.parent_slice
195 return None 168 return None
196 169
197 170
198 class V8EventStat(object): 171 class V8EventStat(object):
199 172
200 def __init__(self, src_event_name, result_name, result_description): 173 def __init__(self, src_event_name, result_name, result_description):
201 self.src_event_name = src_event_name 174 self.src_event_name = src_event_name
202 self.result_name = result_name 175 self.result_name = result_name
203 self.result_description = result_description 176 self.result_description = result_description
204 self.thread_duration = 0.0 177 self.thread_duration = 0.0
205 self.thread_duration_inside_idle = 0.0 178 self.thread_duration_inside_idle = 0.0
206 self.idle_task_overrun_duration = 0.0 179 self.idle_task_overrun_duration = 0.0
207 self.max_thread_duration = 0.0 180 self.max_thread_duration = 0.0
208 self.count = 0 181 self.count = 0
209 182
210 @property 183 @property
211 def thread_duration_outside_idle(self): 184 def thread_duration_outside_idle(self):
212 return self.thread_duration - self.thread_duration_inside_idle 185 return self.thread_duration - self.thread_duration_inside_idle
213 186
214 @property 187 @property
215 def percentage_thread_duration_during_idle(self): 188 def percentage_thread_duration_during_idle(self):
216 return statistics.DivideIfPossibleOrZero( 189 return statistics.DivideIfPossibleOrZero(
217 100 * self.thread_duration_inside_idle, self.thread_duration) 190 100 * self.thread_duration_inside_idle, self.thread_duration)
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698