# Copyright 2014 The Chromium Authors. All rights reserved. # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. from core import perf_benchmark from benchmarks import silk_flags from measurements import thread_times import page_sets from telemetry import benchmark class _ThreadTimes(perf_benchmark.PerfBenchmark): @classmethod def AddBenchmarkCommandLineArgs(cls, parser): parser.add_option('--report-silk-details', action='store_true', help='Report details relevant to silk.') @classmethod def Name(cls): return 'thread_times' @classmethod def ValueCanBeAddedPredicate(cls, value, _): # Default to only reporting per-frame metrics. return 'per_second' not in value.name def CreatePageTest(self, options): return thread_times.ThreadTimes(options.report_silk_details) @benchmark.Enabled('android') class ThreadTimesKeySilkCases(_ThreadTimes): """Measures timeline metrics while performing smoothness action on key silk cases.""" page_set = page_sets.KeySilkCasesPageSet @classmethod def Name(cls): return 'thread_times.key_silk_cases' @benchmark.Enabled('android', 'linux') class ThreadTimesKeyHitTestCases(_ThreadTimes): """Measure timeline metrics while performing smoothness action on key hit testing cases.""" page_set = page_sets.KeyHitTestCasesPageSet @classmethod def Name(cls): return 'thread_times.key_hit_test_cases' @benchmark.Enabled('android') class ThreadTimesFastPathMobileSites(_ThreadTimes): """Measures timeline metrics while performing smoothness action on key mobile sites labeled with fast-path tag. http://www.chromium.org/developers/design-documents/rendering-benchmarks""" page_set = page_sets.KeyMobileSitesSmoothPageSet options = {'story_label_filter': 'fastpath'} @classmethod def Name(cls): return 'thread_times.key_mobile_sites_smooth' @benchmark.Enabled('android') class ThreadTimesSimpleMobileSites(_ThreadTimes): """Measures timeline metric using smoothness action on simple mobile sites http://www.chromium.org/developers/design-documents/rendering-benchmarks""" page_set = page_sets.SimpleMobileSitesPageSet @classmethod def Name(cls): return 'thread_times.simple_mobile_sites' @benchmark.Disabled('win') # crbug.com/443781 class ThreadTimesCompositorCases(_ThreadTimes): """Measures timeline metrics while performing smoothness action on tough compositor cases, using software rasterization. http://www.chromium.org/developers/design-documents/rendering-benchmarks""" page_set = page_sets.ToughCompositorCasesPageSet def SetExtraBrowserOptions(self, options): silk_flags.CustomizeBrowserOptionsForSoftwareRasterization(options) @classmethod def Name(cls): return 'thread_times.tough_compositor_cases' @benchmark.Enabled('android') class ThreadTimesPolymer(_ThreadTimes): """Measures timeline metrics while performing smoothness action on Polymer cases.""" page_set = page_sets.PolymerPageSet @classmethod def Name(cls): return 'thread_times.polymer' @benchmark.Enabled('android') class ThreadTimesKeyIdlePowerCases(_ThreadTimes): """Measures timeline metrics for sites that should be idle in foreground and background scenarios. The metrics are per-second rather than per-frame.""" page_set = page_sets.KeyIdlePowerCasesPageSet @classmethod def Name(cls): return 'thread_times.key_idle_power_cases' @classmethod def ValueCanBeAddedPredicate(cls, value, _): # Only report per-second metrics. return 'per_frame' not in value.name and 'mean_frame' not in value.name @benchmark.Enabled('android') class ThreadTimesKeyNoOpCases(_ThreadTimes): """Measures timeline metrics for common interactions and behaviors that should have minimal cost. The metrics are per-second rather than per-frame.""" page_set = page_sets.KeyNoOpCasesPageSet @classmethod def Name(cls): return 'thread_times.key_noop_cases' @classmethod def ValueCanBeAddedPredicate(cls, value, _): # Only report per-second metrics. return 'per_frame' not in value.name and 'mean_frame' not in value.name @benchmark.Disabled('win') # crbug.com/568175 class ThreadTimesToughScrollingCases(_ThreadTimes): """Measure timeline metrics while performing smoothness action on tough scrolling cases.""" page_set = page_sets.ToughScrollingCasesPageSet @classmethod def Name(cls): return 'thread_times.tough_scrolling_cases'