• 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_dashboard
12from autotest_lib.client.cros.power import power_test
13
14URL = 'https://browserbench.org/Speedometer2.0/'
15RESULT = 'result'
16CONFIDENCE = 'confidence'
17
18class power_Speedometer2(power_test.power_Test):
19    """class for running Speedometer2 test in Chrome.
20
21    Run Speedometer2 and collect logger data.
22    """
23    version = 1
24
25    def initialize(self, pdash_note='', force_discharge=False):
26        """Measure power with a short interval while running Speedometer2."""
27        super(power_Speedometer2, self).initialize(
28                seconds_period=1., pdash_note=pdash_note,
29                force_discharge=force_discharge)
30
31    def run_once(self, url=URL):
32        """Measure power with multiple loggers while running Speedometer2.
33
34        @param url: url of Speedometer2 test page.
35        """
36        with chrome.Chrome(init_network_controller=True) as self.cr:
37            tab = self.cr.browser.tabs.New()
38            tab.Activate()
39
40            # Run in full-screen.
41            fullscreen = tab.EvaluateJavaScript('document.webkitIsFullScreen')
42            if not fullscreen:
43                with keyboard.Keyboard() as keys:
44                    keys.press_key('f4')
45
46            logging.info('Navigating to url: %s', url)
47            tab.Navigate(url)
48            tab.WaitForDocumentReadyStateToBeComplete()
49
50            # Allow CPU to idle.
51            time.sleep(5)
52
53            self.start_measurements()
54            tab.EvaluateJavaScript('startTest()')
55            time.sleep(60)
56            result = ''
57            while not result:
58                time.sleep(10)
59                result = tab.EvaluateJavaScript(
60                        'document.getElementById("%s-number").innerHTML' % \
61                        RESULT)
62            end_time = time.time()
63            result = float(result)
64            confidence = tab.EvaluateJavaScript(
65                    'document.getElementById("%s-number").innerHTML' % \
66                    CONFIDENCE)
67            match = re.search(r"((\d+(\.\d+)?)|(\.\d+))", confidence)
68            confidence = float(match.group(0))
69
70            keyvals = {RESULT: result, CONFIDENCE: confidence}
71            for key, val in keyvals.items():
72                logging.info('Speedometer2 %s: %s', key, val)
73            self.keyvals.update(keyvals)
74            self.output_perf_value(description=RESULT, value=result,
75                                   higher_is_better=True)
76            self.output_perf_value(description=CONFIDENCE, value=confidence,
77                                   higher_is_better=False)
78
79            logger = power_dashboard.KeyvalLogger(self._start_time, end_time)
80            logger.add_item(RESULT, result, 'point', 'perf')
81            logger.add_item(CONFIDENCE, confidence, 'point', 'perf')
82            self._meas_logs.append(logger)
83