blob: 503238338426ca9c50e10098aa06926fc18d476f [file] [log] [blame]
# Copyright (c) 2013 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 metrics import smoothness
from metrics import timeline
from telemetry.page import page_measurement
class MissingDisplayFrameRateError(page_measurement.MeasurementFailure):
def __init__(self, name):
super(MissingDisplayFrameRateError, self).__init__(
'Missing display frame rate metrics: ' + name)
class Smoothness(page_measurement.PageMeasurement):
def __init__(self):
super(Smoothness, self).__init__('smoothness')
self._metric = None
def AddCommandLineOptions(self, parser):
metric_choices = ['smoothness', 'timeline']
parser.add_option('--metric', dest='metric', type='choice',
choices=metric_choices,
default='smoothness',
help=('Metric to use in the measurement. ' +
'Supported values: ' + ', '.join(metric_choices)))
def CustomizeBrowserOptions(self, options):
options.AppendExtraBrowserArgs('--enable-gpu-benchmarking')
def CanRunForPage(self, page):
return hasattr(page, 'smoothness')
def WillRunActions(self, page, tab):
if self.options.metric == 'smoothness':
self._metric = smoothness.SmoothnessMetric()
elif self.options.metric == 'timeline':
self._metric = timeline.ThreadTimesTimelineMetric()
self._metric.Start(page, tab)
if tab.browser.platform.IsRawDisplayFrameRateSupported():
tab.browser.platform.StartRawDisplayFrameRateMeasurement()
def DidRunAction(self, page, tab, action):
timeline_marker_name = action.GetTimelineMarkerName()
if self.options.metric == 'smoothness' and timeline_marker_name:
self._metric.AddTimelineMarkerNameToIncludeInMetric(timeline_marker_name)
def DidRunActions(self, page, tab):
if tab.browser.platform.IsRawDisplayFrameRateSupported():
tab.browser.platform.StopRawDisplayFrameRateMeasurement()
self._metric.Stop(page, tab)
def MeasurePage(self, page, tab, results):
self._metric.AddResults(tab, results)
if tab.browser.platform.IsRawDisplayFrameRateSupported():
for r in tab.browser.platform.GetRawDisplayFrameRateMeasurements():
if r.value is None:
raise MissingDisplayFrameRateError(r.name)
results.Add(r.name, r.unit, r.value)