1# Copyright 2020 The Chromium OS Authors. All rights reserved. 2# Use of this source code is governed by a BSD-style license that can be 3# found in the LICENSE file. 4 5import logging 6import re 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 = 'https://browserbench.org/Speedometer2.0/' 14RESULT = 'result' 15CONFIDENCE = 'confidence' 16 17class power_Speedometer2(power_test.power_Test): 18 """class for running Speedometer2 test in Chrome. 19 20 Run Speedometer2 and collect logger data. 21 """ 22 version = 1 23 24 def initialize(self, pdash_note='', force_discharge=False): 25 """Measure power with a short interval while running Speedometer2.""" 26 super(power_Speedometer2, self).initialize( 27 seconds_period=1., pdash_note=pdash_note, 28 force_discharge=force_discharge) 29 30 def run_once(self, url=URL): 31 """Measure power with multiple loggers while running Speedometer2. 32 33 @param url: url of Speedometer2 test page. 34 """ 35 with chrome.Chrome(init_network_controller=True) as self.cr: 36 tab = self.cr.browser.tabs.New() 37 tab.Activate() 38 39 # Run in full-screen. 40 fullscreen = tab.EvaluateJavaScript('document.webkitIsFullScreen') 41 if not fullscreen: 42 with keyboard.Keyboard() as keys: 43 keys.press_key('f4') 44 45 logging.info('Navigating to url: %s', url) 46 tab.Navigate(url) 47 tab.WaitForDocumentReadyStateToBeComplete() 48 49 # Allow CPU to idle. 50 time.sleep(5) 51 52 self.start_measurements() 53 tab.EvaluateJavaScript('startTest()') 54 time.sleep(60) 55 result = '' 56 while not result: 57 time.sleep(10) 58 result = tab.EvaluateJavaScript( 59 'document.getElementById("%s-number").innerHTML' % \ 60 RESULT) 61 result = float(result) 62 confidence = tab.EvaluateJavaScript( 63 'document.getElementById("%s-number").innerHTML' % \ 64 CONFIDENCE) 65 confidence = float(re.findall(r"\d*\.\d*", confidence)[0]) 66 67 keyvals = {RESULT: result, CONFIDENCE: confidence} 68 for key, val in keyvals.items(): 69 logging.info('Speedometer2 %s: %s', key, val) 70 self.keyvals.update(keyvals) 71 self.output_perf_value(description=RESULT, value=result, 72 higher_is_better=True) 73 self.output_perf_value(description=CONFIDENCE, value=confidence, 74 higher_is_better=False) 75