| # Copyright 2014 The Chromium Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| import time |
| |
| from metrics import network |
| from metrics import power |
| from telemetry.core import util |
| from telemetry.page import page_test |
| |
| |
| class Power(page_test.PageTest): |
| """Measures power draw and idle wakeups during the page's interactions.""" |
| |
| def __init__(self): |
| super(Power, self).__init__() |
| self._power_metric = None |
| self._network_metric = None |
| |
| def WillStartBrowser(self, platform): |
| self._power_metric = power.PowerMetric(platform) |
| self._network_metric = network.NetworkMetric(platform) |
| |
| def WillNavigateToPage(self, page, tab): |
| self._network_metric.Start(page, tab) |
| |
| def DidNavigateToPage(self, page, tab): |
| self._power_metric.Start(page, tab) |
| |
| def ValidateAndMeasurePage(self, page, tab, results): |
| self._network_metric.Stop(page, tab) |
| self._power_metric.Stop(page, tab) |
| self._network_metric.AddResults(tab, results) |
| self._power_metric.AddResults(tab, results) |
| |
| def DidRunPage(self, platform): |
| self._power_metric.Close() |
| |
| |
| class LoadPower(Power): |
| |
| def WillNavigateToPage(self, page, tab): |
| self._network_metric.Start(page, tab) |
| self._power_metric.Start(page, tab) |
| |
| def DidNavigateToPage(self, page, tab): |
| pass |
| |
| |
| class QuiescentPower(page_test.PageTest): |
| """Measures power draw and idle wakeups after the page finished loading.""" |
| |
| # Amount of time to measure, in seconds. |
| SAMPLE_TIME = 30 |
| |
| def ValidateAndMeasurePage(self, page, tab, results): |
| if not tab.browser.platform.CanMonitorPower(): |
| return |
| |
| util.WaitFor(tab.HasReachedQuiescence, 60) |
| |
| metric = power.PowerMetric(tab.browser.platform) |
| metric.Start(page, tab) |
| |
| time.sleep(QuiescentPower.SAMPLE_TIME) |
| |
| metric.Stop(page, tab) |
| metric.AddResults(tab, results) |