1# Lint as: python2, python3 2# Copyright 2020 The Chromium OS Authors. All rights reserved. 3# Use of this source code is governed by a BSD-style license that can be 4# found in the LICENSE file. 5 6import logging 7import time 8 9from autotest_lib.client.common_lib.cros import chrome 10from autotest_lib.client.cros.input_playback import keyboard 11from autotest_lib.client.cros.power import power_test 12 13URL = 'http://crospower.page.link/power_Speedometer2' 14RESULT = 'result' 15 16class power_Speedometer2(power_test.power_Test): 17 """class for running Speedometer2 test in Chrome. 18 19 Run Speedometer2 and collect logger data. 20 """ 21 version = 1 22 23 def initialize(self, pdash_note='', force_discharge=False): 24 """Measure power with a short interval while running Speedometer2.""" 25 super(power_Speedometer2, self).initialize( 26 seconds_period=1., pdash_note=pdash_note, 27 force_discharge=force_discharge) 28 29 def run_once(self, url=URL): 30 """Measure power with multiple loggers while running Speedometer2. 31 32 @param url: url of Speedometer2 test page. 33 """ 34 # --disable-sync disables test account info sync, eg. Wi-Fi credentials, 35 # so that each test run does not remember info from last test run. 36 extra_browser_args = ['--disable-sync'] 37 # b/228256145 to avoid powerd restart 38 extra_browser_args.append('--disable-features=FirmwareUpdaterApp') 39 with chrome.Chrome(extra_browser_args=extra_browser_args, 40 init_network_controller=True) as self.cr: 41 tab = self.cr.browser.tabs[0] 42 tab.Activate() 43 44 # Run in full-screen. 45 fullscreen = tab.EvaluateJavaScript('document.webkitIsFullScreen') 46 if not fullscreen: 47 with keyboard.Keyboard() as keys: 48 keys.press_key('f4') 49 50 # Stop services again as Chrome might have restarted them. 51 self._services.stop_services() 52 53 logging.info('Navigating to url: %s', url) 54 tab.Navigate(url) 55 tab.WaitForDocumentReadyStateToBeComplete() 56 57 # Allow CPU to idle. 58 time.sleep(5) 59 60 self.start_measurements() 61 tab.EvaluateJavaScript('startTest()') 62 time.sleep(60) 63 result = '' 64 while not result: 65 time.sleep(10) 66 result = tab.EvaluateJavaScript( 67 'document.getElementById("%s-number").innerHTML' % \ 68 RESULT) 69 end_time = time.time() 70 result = float(result) 71 72 keyvals = {RESULT: result} 73 for key, val in keyvals.items(): 74 logging.info('Speedometer2 %s: %s', key, val) 75 self.keyvals.update(keyvals) 76 self.output_perf_value(description=RESULT, value=result, 77 higher_is_better=True) 78 79 self._keyvallogger.add_item(RESULT, result, 'point', 'perf') 80 self._keyvallogger.set_end(end_time) 81