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_measurement
     10 
     11 
     12 class Media(page_measurement.PageMeasurement):
     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 = power.PowerMetric()
     27 
     28   def results_are_the_same_on_every_page(self):
     29     """Results can vary from page to page based on media events taking place."""
     30     return False
     31 
     32   def CustomizeBrowserOptions(self, options):
     33     # Needed to run media actions in JS on touch-based devices as on Android.
     34     options.AppendExtraBrowserArgs(
     35         '--disable-gesture-requirement-for-media-playback')
     36     power.PowerMetric.CustomizeBrowserOptions(options)
     37 
     38   def DidNavigateToPage(self, page, tab):
     39     """Override to do operations right after the page is navigated."""
     40     self._media_metric = media.MediaMetric(tab)
     41     self._media_metric.Start(page, tab)
     42 
     43     # Reset to false for every page.
     44     self._add_browser_metrics = (page.add_browser_metrics
     45         if hasattr(page, 'add_browser_metrics') else False)
     46 
     47     if self._add_browser_metrics:
     48       self._cpu_metric = cpu.CpuMetric(tab.browser)
     49       self._cpu_metric.Start(page, tab)
     50       self._memory_metric = system_memory.SystemMemoryMetric(tab.browser)
     51       self._memory_metric.Start(page, tab)
     52       self._power_metric.Start(page, tab)
     53 
     54   def MeasurePage(self, page, tab, results):
     55     """Measure the page's performance."""
     56     self._media_metric.Stop(page, tab)
     57     trace_name = self._media_metric.AddResults(tab, results)
     58 
     59     if self._add_browser_metrics:
     60       self._cpu_metric.Stop(page, tab)
     61       self._memory_metric.Stop(page, tab)
     62       self._power_metric.Stop(page, tab)
     63       self._cpu_metric.AddResults(tab, results, trace_name=trace_name)
     64       exclude_metrics = ['WorkingSetSizePeak', 'SystemCommitCharge', 'VMPeak',
     65                          'VM']
     66       self._memory_metric.AddResults(tab, results,
     67                                      trace_name=trace_name,
     68                                      exclude_metrics=exclude_metrics)
     69       self._power_metric.AddResults(tab, results)
     70 
     71