| 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 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 Loading... |
| 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 Loading... |
| 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() | |
| OLD | NEW |