blob: 77c0f7ee10149d15e71e102447c20976bd6c4446 [file] [log] [blame]
# 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 measurements import webrtc
import page_sets
from telemetry import benchmark
from telemetry.timeline import chrome_trace_category_filter
from telemetry.web_perf import timeline_based_measurement
from telemetry.web_perf.metrics import webrtc_rendering_timeline
RENDERING_VALUE_PREFIX = 'WebRTCRendering_'
# TODO(qyearsley, mcasas): Add webrtc.audio when http://crbug.com/468732
# is fixed, or revert https://codereview.chromium.org/1544573002/ when
# http://crbug.com/568333 is fixed.
class _Webrtc(perf_benchmark.PerfBenchmark):
"""Base class for WebRTC metrics for real-time communications tests."""
test = webrtc.WebRTC
class WebrtcGetusermedia(_Webrtc):
"""Measures WebRtc GetUserMedia for video capture and local playback."""
page_set = page_sets.WebrtcGetusermediaPageSet
@classmethod
def Name(cls):
return 'webrtc.getusermedia'
class WebrtcPeerConnection(_Webrtc):
"""Measures WebRtc Peerconnection for remote video and audio communication."""
page_set = page_sets.WebrtcPeerconnectionPageSet
@classmethod
def Name(cls):
return 'webrtc.peerconnection'
@benchmark.Owner(emails=['phoglund@chromium.org'])
class WebrtcDataChannel(_Webrtc):
"""Measures WebRtc DataChannel loopback."""
page_set = page_sets.WebrtcDatachannelPageSet
@classmethod
def Name(cls):
return 'webrtc.datachannel'
@benchmark.Disabled('android') # http://crbug.com/663802
@benchmark.Owner(emails=['ehmaldonado@chromium.org', 'phoglund@chromium.org'])
class WebrtcStressTest(perf_benchmark.PerfBenchmark):
"""Measures WebRtc CPU and GPU usage with multiple peer connections."""
page_set = page_sets.WebrtcStresstestPageSet
@classmethod
def Name(cls):
return 'webrtc.stress'
def CreatePageTest(self, options):
# Exclude all stats.
return webrtc.WebRTC(particular_metrics=['googAvgEncodeMs',
'googFrameRateReceived'])
# WebrtcRendering must be a PerfBenchmark, and not a _Webrtc, because it is a
# timeline-based.
# Disabled on reference builds because they crash and don't support tab
# capture. See http://crbug.com/603232.
@benchmark.Disabled('reference')
@benchmark.Disabled('android') # http://crbug.com/610019
@benchmark.Owner(emails=['qiangchen@chromium.org'])
class WebrtcRendering(perf_benchmark.PerfBenchmark):
"""Specific time measurements (e.g. fps, smoothness) for WebRtc rendering."""
page_set = page_sets.WebrtcRenderingPageSet
def CreateTimelineBasedMeasurementOptions(self):
category_filter = chrome_trace_category_filter.ChromeTraceCategoryFilter(
filter_string='webrtc,webkit.console,blink.console')
options = timeline_based_measurement.Options(category_filter)
options.SetLegacyTimelineBasedMetrics(
[webrtc_rendering_timeline.WebRtcRenderingTimelineMetric()])
return options
def SetExtraBrowserOptions(self, options):
options.AppendExtraBrowserArgs('--use-fake-device-for-media-stream')
options.AppendExtraBrowserArgs('--use-fake-ui-for-media-stream')
@classmethod
def Name(cls):
return 'webrtc.webrtc_smoothness'
# WebrtcRenderingTBMv2 must be a PerfBenchmark, and not a _Webrtc, because it is
# a timeline-based metric.
@benchmark.Disabled('android') # crbug.com/702201
@benchmark.Owner(emails=['ehmaldonado@chromium.org',
'phoglund@chromium.org',
'qiangchen@chromium.org'])
class WebrtcRenderingTBMv2(perf_benchmark.PerfBenchmark):
"""Specific time measurements (e.g. fps, smoothness) for WebRtc rendering."""
page_set = page_sets.WebrtcRenderingPageSet
def CreateTimelineBasedMeasurementOptions(self):
category_filter = chrome_trace_category_filter.ChromeTraceCategoryFilter(
filter_string='webrtc,toplevel')
options = timeline_based_measurement.Options(category_filter)
options.SetTimelineBasedMetrics([
'cpuTimeMetric',
'expectedQueueingTimeMetric',
'webrtcRenderingMetric',
])
return options
def SetExtraBrowserOptions(self, options):
options.AppendExtraBrowserArgs('--use-fake-device-for-media-stream')
options.AppendExtraBrowserArgs('--use-fake-ui-for-media-stream')
@classmethod
def Name(cls):
return 'webrtc.webrtc_smoothness_tbmv2'