1# Copyright 2013 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 metrics import cpu
6from metrics import media
7from metrics import system_memory
8from metrics import power
9from telemetry.page import page_test
10
11
12class Media(page_test.PageTest):
13  """The MediaMeasurement class gathers media-related metrics on a page set.
14
15  Media metrics recorded are controlled by metrics/media.js.  At the end of the
16  test each metric for every media element in the page are reported.
17  """
18
19  def __init__(self):
20    super(Media, self).__init__('RunMediaMetrics')
21    self._media_metric = None
22    # Used to add browser power and CPU metrics to results per test.
23    self._add_browser_metrics = False
24    self._cpu_metric = None
25    self._memory_metric = None
26    self._power_metric = None
27
28  def WillStartBrowser(self, platform):
29    self._power_metric = power.PowerMetric(platform)
30
31  def CustomizeBrowserOptions(self, options):
32    # Needed to run media actions in JS on touch-based devices as on Android.
33    options.AppendExtraBrowserArgs(
34        '--disable-gesture-requirement-for-media-playback')
35    power.PowerMetric.CustomizeBrowserOptions(options)
36
37  def DidNavigateToPage(self, page, tab):
38    """Override to do operations right after the page is navigated."""
39    self._media_metric = media.MediaMetric(tab)
40    self._media_metric.Start(page, tab)
41
42    # Reset to false for every page.
43    self._add_browser_metrics = (page.add_browser_metrics
44        if hasattr(page, 'add_browser_metrics') else False)
45
46    if self._add_browser_metrics:
47      self._cpu_metric = cpu.CpuMetric(tab.browser)
48      self._cpu_metric.Start(page, tab)
49      self._memory_metric = system_memory.SystemMemoryMetric(tab.browser)
50      self._memory_metric.Start(page, tab)
51      self._power_metric.Start(page, tab)
52
53  def ValidateAndMeasurePage(self, page, tab, results):
54    """Measure the page's performance."""
55    self._media_metric.Stop(page, tab)
56    trace_name = self._media_metric.AddResults(tab, results)
57
58    if self._add_browser_metrics:
59      self._cpu_metric.Stop(page, tab)
60      self._memory_metric.Stop(page, tab)
61      self._power_metric.Stop(page, tab)
62      self._cpu_metric.AddResults(tab, results, trace_name=trace_name)
63      exclude_metrics = ['WorkingSetSizePeak', 'SystemCommitCharge', 'VMPeak',
64                         'VM']
65      self._memory_metric.AddResults(tab, results,
66                                     trace_name=trace_name,
67                                     exclude_metrics=exclude_metrics)
68      self._power_metric.AddResults(tab, results)
69