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

Side by Side Diff: telemetry/telemetry/web_perf/timeline_based_measurement.py

Issue 1685683003: Implement Timeline Based Measurement v2 (Closed) Base URL: git@github.com:catapult-project/catapult.git@new_style_results
Patch Set: fix vinn tests Created 4 years, 9 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 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 tracing.metrics import metric_runner
9
8 from telemetry.timeline import model as model_module 10 from telemetry.timeline import model as model_module
9 from telemetry.timeline import tracing_category_filter 11 from telemetry.timeline import tracing_category_filter
10 from telemetry.timeline import tracing_config 12 from telemetry.timeline import tracing_config
11 from telemetry.value import trace 13 from telemetry.value import trace
14 from telemetry.value import translate_common_values
12 from telemetry.web_perf.metrics import timeline_based_metric 15 from telemetry.web_perf.metrics import timeline_based_metric
13 from telemetry.web_perf.metrics import blob_timeline 16 from telemetry.web_perf.metrics import blob_timeline
14 from telemetry.web_perf.metrics import jitter_timeline 17 from telemetry.web_perf.metrics import jitter_timeline
15 from telemetry.web_perf.metrics import webrtc_rendering_timeline 18 from telemetry.web_perf.metrics import webrtc_rendering_timeline
16 from telemetry.web_perf.metrics import gpu_timeline 19 from telemetry.web_perf.metrics import gpu_timeline
17 from telemetry.web_perf.metrics import indexeddb_timeline 20 from telemetry.web_perf.metrics import indexeddb_timeline
18 from telemetry.web_perf.metrics import layout 21 from telemetry.web_perf.metrics import layout
19 from telemetry.web_perf.metrics import memory_timeline 22 from telemetry.web_perf.metrics import memory_timeline
20 from telemetry.web_perf.metrics import responsiveness_metric 23 from telemetry.web_perf.metrics import responsiveness_metric
21 from telemetry.web_perf.metrics import smoothness 24 from telemetry.web_perf.metrics import smoothness
(...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after
182 self._config.SetNoOverheadFilter() 185 self._config.SetNoOverheadFilter()
183 elif overhead_level == MINIMAL_OVERHEAD_LEVEL: 186 elif overhead_level == MINIMAL_OVERHEAD_LEVEL:
184 self._config.SetMinimalOverheadFilter() 187 self._config.SetMinimalOverheadFilter()
185 else: 188 else:
186 self._config.SetDebugOverheadFilter() 189 self._config.SetDebugOverheadFilter()
187 else: 190 else:
188 raise Exception("Overhead level must be a TracingCategoryFilter object" 191 raise Exception("Overhead level must be a TracingCategoryFilter object"
189 " or valid overhead level string." 192 " or valid overhead level string."
190 " Given overhead level: %s" % overhead_level) 193 " Given overhead level: %s" % overhead_level)
191 194
195 self._timeline_based_metrics = None
192 self._legacy_timeline_based_metrics = _GetAllLegacyTimelineBasedMetrics() 196 self._legacy_timeline_based_metrics = _GetAllLegacyTimelineBasedMetrics()
193 197
194 198
195 def ExtendTraceCategoryFilter(self, filters): 199 def ExtendTraceCategoryFilter(self, filters):
196 for new_category_filter in filters: 200 for new_category_filter in filters:
197 self._config.tracing_category_filter.AddIncludedCategory( 201 self._config.tracing_category_filter.AddIncludedCategory(
198 new_category_filter) 202 new_category_filter)
199 203
200 @property 204 @property
201 def category_filter(self): 205 def category_filter(self):
202 return self._config.tracing_category_filter 206 return self._config.tracing_category_filter
203 207
204 @property 208 @property
205 def config(self): 209 def config(self):
206 return self._config 210 return self._config
207 211
208 def SetTimelineBasedMetrics(self, metrics): 212 def SetTimelineBasedMetrics(self, metrics):
209 # TODO(eakuefner@): implement this 213 """Sets the new-style (TBMv2) metrics to run.
210 raise NotImplementedError() 214
215 Metrics are assumed to live in //tracing/tracing/metrics, so all paths
216 should be relative to that. For example, to specify sample_metric.html,
217 you would pass ['sample_metric.html'].
218
219 Args:
220 metrics: A list of string metric paths under //tracing/tracing/metrics.
221 """
222 assert isinstance(metrics, list)
223 self._legacy_timeline_based_metrics = None
224 self._timeline_based_metrics = metrics
211 225
212 def GetTimelineBasedMetrics(self): 226 def GetTimelineBasedMetrics(self):
213 # TODO(eakuefner@): implement this 227 return self._timeline_based_metrics
214 raise NotImplementedError()
215 228
216 def SetLegacyTimelineBasedMetrics(self, metrics): 229 def SetLegacyTimelineBasedMetrics(self, metrics):
230 assert self._timeline_based_metrics == None
217 assert isinstance(metrics, collections.Iterable) 231 assert isinstance(metrics, collections.Iterable)
218 for m in metrics: 232 for m in metrics:
219 assert isinstance(m, timeline_based_metric.TimelineBasedMetric) 233 assert isinstance(m, timeline_based_metric.TimelineBasedMetric)
220 self._legacy_timeline_based_metrics = metrics 234 self._legacy_timeline_based_metrics = metrics
221 235
222 def GetLegacyTimelineBasedMetrics(self): 236 def GetLegacyTimelineBasedMetrics(self):
223 return self._legacy_timeline_based_metrics 237 return self._legacy_timeline_based_metrics
224 238
225 239
226 class TimelineBasedMeasurement(story_test.StoryTest): 240 class TimelineBasedMeasurement(story_test.StoryTest):
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
258 272
259 def WillRunStory(self, platform): 273 def WillRunStory(self, platform):
260 """Configure and start tracing.""" 274 """Configure and start tracing."""
261 if not platform.tracing_controller.IsChromeTracingSupported(): 275 if not platform.tracing_controller.IsChromeTracingSupported():
262 raise Exception('Not supported') 276 raise Exception('Not supported')
263 platform.tracing_controller.StartTracing(self._tbm_options.config) 277 platform.tracing_controller.StartTracing(self._tbm_options.config)
264 278
265 def Measure(self, platform, results): 279 def Measure(self, platform, results):
266 """Collect all possible metrics and added them to results.""" 280 """Collect all possible metrics and added them to results."""
267 trace_result = platform.tracing_controller.StopTracing() 281 trace_result = platform.tracing_controller.StopTracing()
268 results.AddValue(trace.TraceValue(results.current_page, trace_result)) 282 trace_value = trace.TraceValue(results.current_page, trace_result)
283 results.AddValue(trace_value)
284
285 if self._tbm_options.GetTimelineBasedMetrics():
286 self._ComputeTimelineBasedMetrics(results, trace_value)
287 else:
288 assert self._tbm_options.GetLegacyTimelineBasedMetrics()
289 self._ComputeLegacyTimelineBasedMetrics(results, trace_result)
290
291
292 def DidRunStory(self, platform):
293 """Clean up after running the story."""
294 if platform.tracing_controller.is_tracing_running:
295 platform.tracing_controller.StopTracing()
296
297 def _ComputeTimelineBasedMetrics(self, results, trace_value):
298 metrics = self._tbm_options.GetTimelineBasedMetrics()
299
300 # TODO(eakuefner)
301 mre_result = metric_runner.RunMetrics(trace_value.filename, metrics)
302 page = results.current_page
303
304 failure_dicts = mre_result.failures
305 for d in failure_dicts:
306 results.AddValue(
307 translate_common_values.TranslateMreFailure(d, page))
308
309 value_dicts = mre_result.pairs.get('values', [])
310 for d in value_dicts:
311 results.AddValue(
312 translate_common_values.TranslateScalarValue(d, page))
313
314 def _ComputeLegacyTimelineBasedMetrics(self, results, trace_result):
269 model = model_module.TimelineModel(trace_result) 315 model = model_module.TimelineModel(trace_result)
270 threads_to_records_map = _GetRendererThreadsToInteractionRecordsMap(model) 316 threads_to_records_map = _GetRendererThreadsToInteractionRecordsMap(model)
271 if (len(threads_to_records_map.values()) == 0 and 317 if (len(threads_to_records_map.values()) == 0 and
272 self._tbm_options.config.enable_chrome_trace): 318 self._tbm_options.config.enable_chrome_trace):
273 logging.warning( 319 logging.warning(
274 'No timeline interaction records were recorded in the trace. ' 320 'No timeline interaction records were recorded in the trace. '
275 'This could be caused by console.time() & console.timeEnd() execution' 321 'This could be caused by console.time() & console.timeEnd() execution'
276 ' failure or the tracing category specified doesn\'t include ' 322 ' failure or the tracing category specified doesn\'t include '
277 'blink.console categories.') 323 'blink.console categories.')
278 324
279 all_metrics = self._tbm_options.GetLegacyTimelineBasedMetrics() 325 all_metrics = self._tbm_options.GetLegacyTimelineBasedMetrics()
280 326
281 for renderer_thread, interaction_records in ( 327 for renderer_thread, interaction_records in (
282 threads_to_records_map.iteritems()): 328 threads_to_records_map.iteritems()):
283 meta_metrics = _TimelineBasedMetrics( 329 meta_metrics = _TimelineBasedMetrics(
284 model, renderer_thread, interaction_records, self._results_wrapper, 330 model, renderer_thread, interaction_records, self._results_wrapper,
285 all_metrics) 331 all_metrics)
286 meta_metrics.AddResults(results) 332 meta_metrics.AddResults(results)
287 333
288 for metric in all_metrics: 334 for metric in all_metrics:
289 metric.AddWholeTraceResults(model, results) 335 metric.AddWholeTraceResults(model, results)
290
291 def DidRunStory(self, platform):
292 """Clean up after running the story."""
293 if platform.tracing_controller.is_tracing_running:
294 platform.tracing_controller.StopTracing()
OLDNEW
« no previous file with comments | « telemetry/telemetry/value/value_unittest.py ('k') | telemetry/telemetry/web_perf/timeline_based_page_test_unittest.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698