17dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch# Copyright 2013 The Chromium Authors. All rights reserved. 27dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch# Use of this source code is governed by a BSD-style license that can be 37dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch# found in the LICENSE file. 47dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 54e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)from metrics import cpu 63240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdochfrom metrics import media 7e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdochfrom metrics import system_memory 85d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)from metrics import power 96e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)from telemetry.page import page_test 107dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 1158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 126e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)class Media(page_test.PageTest): 133240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch """The MediaMeasurement class gathers media-related metrics on a page set. 147dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 153240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch Media metrics recorded are controlled by metrics/media.js. At the end of the 163240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch test each metric for every media element in the page are reported. 173240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch """ 184e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 197dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch def __init__(self): 2023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) super(Media, self).__init__('RunMediaMetrics') 213240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch self._media_metric = None 22a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) # Used to add browser power and CPU metrics to results per test. 234e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) self._add_browser_metrics = False 244e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) self._cpu_metric = None 25e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch self._memory_metric = None 26116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch self._power_metric = None 277dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci def WillStartBrowser(self, platform): 291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci self._power_metric = power.PowerMetric(platform) 30116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) def CustomizeBrowserOptions(self, options): 325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) # Needed to run media actions in JS on touch-based devices as on Android. 335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) options.AppendExtraBrowserArgs( 345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) '--disable-gesture-requirement-for-media-playback') 355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) power.PowerMetric.CustomizeBrowserOptions(options) 365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 377dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch def DidNavigateToPage(self, page, tab): 387dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch """Override to do operations right after the page is navigated.""" 393240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch self._media_metric = media.MediaMetric(tab) 403240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch self._media_metric.Start(page, tab) 415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 424e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) # Reset to false for every page. 43e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch self._add_browser_metrics = (page.add_browser_metrics 44e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch if hasattr(page, 'add_browser_metrics') else False) 454e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 464e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) if self._add_browser_metrics: 474e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) self._cpu_metric = cpu.CpuMetric(tab.browser) 484e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) self._cpu_metric.Start(page, tab) 49e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch self._memory_metric = system_memory.SystemMemoryMetric(tab.browser) 50e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch self._memory_metric.Start(page, tab) 51a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) self._power_metric.Start(page, tab) 527dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 536e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) def ValidateAndMeasurePage(self, page, tab, results): 547dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch """Measure the page's performance.""" 553240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch self._media_metric.Stop(page, tab) 564e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) trace_name = self._media_metric.AddResults(tab, results) 57a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 584e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) if self._add_browser_metrics: 594e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) self._cpu_metric.Stop(page, tab) 60e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch self._memory_metric.Stop(page, tab) 61a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) self._power_metric.Stop(page, tab) 62e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch self._cpu_metric.AddResults(tab, results, trace_name=trace_name) 63e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch exclude_metrics = ['WorkingSetSizePeak', 'SystemCommitCharge', 'VMPeak', 64e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch 'VM'] 65e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch self._memory_metric.AddResults(tab, results, 66e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch trace_name=trace_name, 67e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch exclude_metrics=exclude_metrics) 68a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) self._power_metric.AddResults(tab, results) 69