media.py revision 23730a6e56a168d1879203e4b3819bb36e3d8f1f
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
5from measurements import media
6from telemetry import test
7from telemetry.page import page_measurement
8
9
10class _MSEMeasurement(page_measurement.PageMeasurement):
11  def MeasurePage(self, page, tab, results):
12    media_metric = tab.EvaluateJavaScript('window.__testMetrics')
13    trace = media_metric['id'] if 'id' in media_metric else None
14    metrics = media_metric['metrics'] if 'metrics' in media_metric else []
15    for m in metrics:
16      if isinstance(metrics[m], list):
17        values = [float(v) for v in metrics[m]]
18      else:
19        values = float(metrics[m])
20      results.Add(trace, 'ms', values, chart_name=m)
21
22
23class Media(test.Test):
24  """Obtains media metrics for key user scenarios."""
25  test = media.Media
26  page_set = 'page_sets/tough_video_cases.json'
27
28
29@test.Disabled('mac')  # http://crbug.com/353268
30class MediaNetworkSimulation(test.Test):
31  """Obtains media metrics under different network simulations."""
32  test = media.Media
33  page_set = 'page_sets/media_cns_cases.json'
34
35
36class MediaAndroid(test.Test):
37  """Obtains media metrics for key user scenarios on Android."""
38  test = media.Media
39  tag = 'android'
40  page_set = 'page_sets/tough_video_cases.json'
41  # Exclude 4k and 50 fps media files (garden* & crowd*).
42  options = {
43      'page_label_filter_exclude': '4k,50fps'}
44
45
46class MediaChromeOS4kOnly(test.Test):
47  """Benchmark for media performance on ChromeOS using only 4k test content."""
48  test = media.Media
49  tag = 'chromeOS4kOnly'
50  page_set = 'page_sets/tough_video_cases.json'
51  options = {'page_label_filter': '4k',
52             # Exclude 50fps test files: crbug/331816
53             'page_label_filter_exclude': '50fps'}
54
55
56class MediaChromeOS(test.Test):
57  """Benchmark for media performance on all ChromeOS platforms.
58
59  This benchmark does not run 4k content, there's a separate benchmark for that.
60  """
61  test = media.Media
62  tag = 'chromeOS'
63  page_set = 'page_sets/tough_video_cases.json'
64  # Exclude 50fps test files: crbug/331816
65  options = {'page_label_filter_exclude': '4k,50fps'}
66
67
68class MediaSourceExtensions(test.Test):
69  """Obtains media metrics for key media source extensions functions."""
70  test = _MSEMeasurement
71  page_set = 'page_sets/mse_cases.json'
72
73  def CustomizeBrowserOptions(self, options):
74    # Needed to allow XHR requests to return stream objects.
75    options.AppendExtraBrowserArgs(
76        ['--enable-experimental-web-platform-features',
77         '--disable-gesture-requirement-for-media-playback'])
78