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 3 # found in the LICENSE file. 4 from measurements import timeline_controller 5 from metrics import timeline 6 from telemetry.core.platform import tracing_category_filter 7 from telemetry.page import page_test 8 9 class ThreadTimes(page_test.PageTest): 10 def __init__(self): 11 super(ThreadTimes, self).__init__('RunSmoothness') 12 self._timeline_controller = None 13 14 @classmethod 15 def AddCommandLineArgs(cls, parser): 16 parser.add_option('--report-silk-results', action='store_true', 17 help='Report results relevant to silk.') 18 parser.add_option('--report-silk-details', action='store_true', 19 help='Report details relevant to silk.') 20 21 def WillNavigateToPage(self, page, tab): 22 self._timeline_controller = timeline_controller.TimelineController() 23 if self.options.report_silk_details: 24 # We need the other traces in order to have any details to report. 25 self.timeline_controller.trace_categories = None 26 else: 27 self._timeline_controller.trace_categories = \ 28 tracing_category_filter.CreateNoOverheadFilter().filter_string 29 self._timeline_controller.SetUp(page, tab) 30 31 def WillRunActions(self, page, tab): 32 self._timeline_controller.Start(tab) 33 34 def DidRunActions(self, page, tab): 35 self._timeline_controller.Stop(tab) 36 37 def ValidateAndMeasurePage(self, page, tab, results): 38 metric = timeline.ThreadTimesTimelineMetric() 39 renderer_thread = \ 40 self._timeline_controller.model.GetRendererThreadFromTabId(tab.id) 41 if self.options.report_silk_results: 42 metric.results_to_report = timeline.ReportSilkResults 43 if self.options.report_silk_details: 44 metric.details_to_report = timeline.ReportSilkDetails 45 metric.AddResults(self._timeline_controller.model, renderer_thread, 46 self._timeline_controller.smooth_records, results) 47 48 def CleanUpAfterPage(self, _, tab): 49 self._timeline_controller.CleanUp(tab) 50