• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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