Home | History | Annotate | Download | only in measurements
      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 
      5 from metrics import cpu
      6 from metrics import media
      7 from metrics import system_memory
      8 from metrics import power
      9 from telemetry.page import page_test
     10 
     11 
     12 class 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