| # Copyright 2018 The Chromium OS 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 logging |
| import time |
| |
| from autotest_lib.client.common_lib.cros import chrome |
| from autotest_lib.client.cros.input_playback import keyboard |
| from autotest_lib.client.cros.power import power_dashboard |
| from autotest_lib.client.cros.power import power_status |
| from autotest_lib.client.cros.power import power_test |
| |
| |
| class power_ThermalLoad(power_test.power_Test): |
| """class for power_ThermalLoad test. |
| """ |
| version = 2 |
| |
| FISHTANK_URL = 'http://storage.googleapis.com/chrome-power/aquarium/aquarium/aquarium.html' |
| HOUR = 60 * 60 |
| |
| def run_once(self, test_url=FISHTANK_URL, duration=2.5*HOUR, numFish=3000): |
| """run_once method. |
| |
| @param test_url: url of webgl heavy page. |
| @param duration: time in seconds to display url and measure power. |
| @param numFish: number of fish to pass to WebGL Aquarium. |
| """ |
| with chrome.Chrome(init_network_controller=True) as self.cr: |
| tab = self.cr.browser.tabs.New() |
| tab.Activate() |
| |
| # Just measure power in full-screen. |
| fullscreen = tab.EvaluateJavaScript('document.webkitIsFullScreen') |
| if not fullscreen: |
| with keyboard.Keyboard() as keys: |
| keys.press_key('f4') |
| |
| self.backlight.set_percent(100) |
| |
| url = test_url + "?numFish=" + str(numFish) |
| logging.info('Navigating to url: %s', url) |
| tab.Navigate(url) |
| tab.WaitForDocumentReadyStateToBeComplete() |
| |
| self._flog = FishTankFpsLogger(tab, |
| seconds_period=self._seconds_period, |
| checkpoint_logger=self._checkpoint_logger) |
| self._meas_logs.append(self._flog) |
| |
| self.start_measurements() |
| time.sleep(duration) |
| |
| def publish_dashboard(self): |
| """Report results power dashboard.""" |
| super(power_ThermalLoad, self).publish_dashboard() |
| |
| vdash = power_dashboard.VideoFpsLoggerDashboard( |
| self._flog, self.tagged_testname, self.resultsdir, |
| note=self._pdash_note) |
| vdash.upload() |
| |
| |
| class FishTankFpsLogger(power_status.MeasurementLogger): |
| """Class to measure Video WebGL Aquarium fps & fish per sec.""" |
| |
| def __init__(self, tab, seconds_period=20.0, checkpoint_logger=None): |
| """Initialize a FishTankFpsLogger. |
| |
| Args: |
| tab: Chrome tab object |
| """ |
| super(FishTankFpsLogger, self).__init__([], seconds_period, |
| checkpoint_logger) |
| self._tab = tab |
| self._lastFrameCount = 0 |
| fishCount = self._tab.EvaluateJavaScript('fishCount') |
| self.domains = ['avg_fps_%04d_fishes' % fishCount] |
| self.refresh() |
| |
| def refresh(self): |
| frameCount = self._tab.EvaluateJavaScript('frameCount') |
| fps = (frameCount - self._lastFrameCount) / self.seconds_period |
| self._lastFrameCount = frameCount |
| return [fps] |
| |
| def save_results(self, resultsdir, fname_prefix=None): |
| if not fname_prefix: |
| fname_prefix = '%s_results_%.0f' % (self.domains[0], time.time()) |
| super(FishTankFpsLogger, self).save_results(resultsdir, fname_prefix) |
| |
| def calc(self, mtype='fps'): |
| return super(FishTankFpsLogger, self).calc(mtype) |