xref: /aosp_15_r20/external/autotest/client/site_tests/power_Speedometer2/power_Speedometer2.py (revision 9c5db1993ded3edbeafc8092d69fe5de2ee02df7)
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