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