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