xref: /aosp_15_r20/external/autotest/server/site_tests/chromium_Telemetry/chromium_Telemetry.py (revision 9c5db1993ded3edbeafc8092d69fe5de2ee02df7)
1# Lint as: python2, python3
2# Copyright (c) 2022 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 json
7import logging
8import os
9
10from autotest_lib.client.common_lib import utils
11from autotest_lib.client.common_lib.cros import tpm_utils
12from autotest_lib.server import test
13from autotest_lib.server.cros import chrome_sideloader
14from autotest_lib.server.cros import telemetry_runner
15from autotest_lib.server.cros.crosperf import device_setup_utils
16
17
18class chromium_Telemetry(test.test):
19    """Run a telemetry benchmark on browser infra built Chrome."""
20    version = 1
21
22    # The path where TLS provisioned the lacros image.
23    CHROME_PROVISION = '/var/lib/imageloader/lacros'
24
25    # The path where we install chromium/src. In this experimental
26    # stage, we may use existing lacros image, which built at src.
27    CHROME_BUILD = '/usr/local/lacros-build'
28
29    # The path that telemetry backend can find chrome.
30    # See go/lacros_browser_backend.
31    CHROME_DIR = '/usr/local/lacros-chrome'
32
33    def initialize(self, host=None, args=None):
34        self.host = host
35        assert self.host.path_exists(self.CHROME_PROVISION), (
36                'lacros artifact'
37                'is not provisioned by CTP. Please check the CTP request.')
38
39        chrome_sideloader.setup_host(self.host, self.CHROME_BUILD, None)
40
41        self.args_dict = utils.args_to_dict(args)
42        path_to_chrome = os.path.join(
43                self.CHROME_BUILD, self.args_dict.get('exe_rel_path',
44                                                      'chrome'))
45        logging.info('provisioned lacros to %s', path_to_chrome)
46
47        self.host.run(['rm', '-rf', self.CHROME_DIR])
48        self.host.run(['mkdir', '-p', '--mode', '0755', self.CHROME_DIR])
49        self.host.run([
50                'mv',
51                '%s/*' % os.path.dirname(path_to_chrome),
52                '%s/' % self.CHROME_DIR
53        ])
54
55        tpm_utils.ClearTPMOwnerRequest(self.host, wait_for_ready=True)
56
57        # TODO(crbug/1233676): Read benchmark and filters from test_args.
58        self.benchmark = 'speedometer2'
59        self.telemetry_args = '--story-filter=Speedometer2'.split()
60        repeat = self.args_dict.get('pageset_repeat')
61        if repeat is not None:
62            self.telemetry_args.append('--pageset-repeat=%s' % repeat)
63
64    def run_once(self):
65        """Run a telemetry benchmark."""
66
67        dut_config_str = self.args_dict.get('dut_config', '{}')
68        dut_config = json.loads(dut_config_str)
69        if dut_config:
70            device_setup_utils.setup_device(self.host, dut_config)
71
72        with telemetry_runner.TelemetryRunnerFactory().get_runner(
73                self.host, telemetry_on_dut=False,
74                is_lacros=True) as telemetry:
75            perf_value_writer = self
76            telemetry.run_telemetry_benchmark(self.benchmark,
77                                              perf_value_writer,
78                                              *self.telemetry_args)
79
80    def cleanup(self):
81        chrome_sideloader.cleanup_host(self.host, self.CHROME_BUILD, None)
82        chrome_sideloader.cleanup_host(self.host, self.CHROME_DIR, None)
83