blob: 7fdbc2943c67e179bb1a06d0e495922cf29b2ba5 [file] [log] [blame]
# 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)