from core import perf_benchmark
from core import platforms
from telemetry import benchmark
from telemetry import story
from telemetry.timeline import chrome_trace_category_filter
from telemetry.timeline import chrome_trace_config
from telemetry.web_perf import timeline_based_measurement
import page_sets
class _MediaBenchmark(perf_benchmark.PerfBenchmark):
"""Base class for TBMv2-based media benchmarks (MediaDesktop and
MediaMobile)."""
def CreateCoreTimelineBasedMeasurementOptions(self):
category_filter = chrome_trace_category_filter.ChromeTraceCategoryFilter()
category_filter.AddIncludedCategory('toplevel')
category_filter.AddIncludedCategory('media')
category_filter.AddDisabledByDefault('disabled-by-default-memory-infra')
options = timeline_based_measurement.Options(category_filter)
options.config.enable_android_graphics_memtrack = True
options.config.chrome_trace_config.SetMemoryDumpConfig(
chrome_trace_config.MemoryDumpConfig())
options.SetTimelineBasedMetrics(['mediaMetric', 'cpuTimeMetric'])
return options
def SetExtraBrowserOptions(self, options):
options.AppendExtraBrowserArgs('--disable-features=BackForwardCache')
@benchmark.Info(emails=['dalecurtis@chromium.org'],
component='Internals>Media',
documentation_url='https://chromium.googlesource.com/chromium/src/+/main/docs/speed/benchmark/harnesses/media.md')
class MediaDesktop(_MediaBenchmark):
"""Obtains media performance for key user scenarios on desktop."""
SUPPORTED_PLATFORM_TAGS = [platforms.DESKTOP]
SUPPORTED_PLATFORMS = [story.expectations.ALL_DESKTOP]
def CreateStorySet(self, options):
return page_sets.MediaCasesDesktopStorySet()
@classmethod
def Name(cls):
return 'media.desktop'
@benchmark.Info(emails=['dalecurtis@chromium.org'],
component='Internals>Media',
documentation_url='https://chromium.googlesource.com/chromium/src/+/main/docs/speed/benchmark/harnesses/media.md')
class MediaMobile(_MediaBenchmark):
"""Obtains media performance for key user scenarios on mobile devices."""
SUPPORTED_PLATFORM_TAGS = [
platforms.ANDROID_NOT_WEBVIEW, platforms.FUCHSIA_ASTRO,
platforms.FUCHSIA_SHERLOCK
]
SUPPORTED_PLATFORMS = [
story.expectations.ANDROID_NOT_WEBVIEW, story.expectations.FUCHSIA_ASTRO,
story.expectations.FUCHSIA_SHERLOCK, story.expectations.FUCHSIA_NELSON
]
def CreateStorySet(self, options):
return page_sets.MediaCasesMobileStorySet()
@classmethod
def Name(cls):
return 'media.mobile'
def SetExtraBrowserOptions(self, options):
super(MediaMobile, self).SetExtraBrowserOptions(options)
options.AppendExtraBrowserArgs(
['--autoplay-policy=no-user-gesture-required'])
options.AppendExtraBrowserArgs(
'--force-online-connection-state-for-indicator')