15d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)# Copyright 2014 The Chromium Authors. All rights reserved.
25d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)# Use of this source code is governed by a BSD-style license that can be
35d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)# found in the LICENSE file.
45d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
55d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)from metrics import cpu
65d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)from metrics import memory
74ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdochfrom metrics import power
86e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)from telemetry.page import page_test
95d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
116e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)class WebRTC(page_test.PageTest):
125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  """Gathers WebRTC-related metrics on a page set."""
135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  def __init__(self):
1523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    super(WebRTC, self).__init__('RunWebrtc')
165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    self._cpu_metric = None
175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    self._memory_metric = None
18116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    self._power_metric = None
19116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  def WillStartBrowser(self, platform):
211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    self._power_metric = power.PowerMetric(platform)
225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  def DidStartBrowser(self, browser):
245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    self._cpu_metric = cpu.CpuMetric(browser)
255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    self._memory_metric = memory.MemoryMetric(browser)
265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  def DidNavigateToPage(self, page, tab):
285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    self._cpu_metric.Start(page, tab)
295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    self._memory_metric.Start(page, tab)
304ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch    self._power_metric.Start(page, tab)
315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  def CustomizeBrowserOptions(self, options):
335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    memory.MemoryMetric.CustomizeBrowserOptions(options)
345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    options.AppendExtraBrowserArgs('--use-fake-device-for-media-stream')
355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    options.AppendExtraBrowserArgs('--use-fake-ui-for-media-stream')
364ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch    power.PowerMetric.CustomizeBrowserOptions(options)
375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
386e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  def ValidateAndMeasurePage(self, page, tab, results):
395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    """Measure the page's performance."""
405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    self._memory_metric.Stop(page, tab)
415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    self._memory_metric.AddResults(tab, results)
425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    self._cpu_metric.Stop(page, tab)
445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    self._cpu_metric.AddResults(tab, results)
455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
464ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch    self._power_metric.Stop(page, tab)
474ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch    self._power_metric.AddResults(tab, results)
48