perfkitbenchmarker/linux_packages/chromium_compile.py (111 lines of code) (raw):

"""Module for installing chromium_compile_benchmark dependencies.""" import logging import os.path from absl import flags from perfkitbenchmarker import vm_util CHROMIUM_COMPILE_TARGETS = flags.DEFINE_list( 'chromium_compile_targets', ['base_unittests', 'chrome'], 'Build (and clean) these build targets. base_unittests is a ' 'minimal target which is very quick to build and should be ' 'closer to the build overhead. chrome builds the browser ' 'itself. Passing ALL will result in ninja building ' 'everything (an empty target) which, per the chromium docs ' 'will take hours.', ) # TODO(andytzhu): Upgrade periodically. CHROMIUM_COMPILE_CHECKOUT = flags.DEFINE_string( 'chromium_compile_checkout', '127.0.6533.88', 'What (tag, commit, branch) to check out from the chromium repo. This will ' 'be included in the metadata so builds for the same tag can be correlated.', ) CHROMIUM_COMPILE_TOOLS_CHECKOUT = flags.DEFINE_string( 'chromium_compile_tools_checkout', '6e1a586bf2eb140e22caaf971ab133853e2c0c04', 'What (tag, commit, branch) to check out from the chromium tools repo. ' 'This should be coordinated with --chromium_compile_checkout and will ' 'be included in the metadata so builds for the same tag can be correlated.', ) FLAGS = flags.FLAGS BENCHMARK_NAME = 'chromium_compile' WORKING_DIRECTORY_NAME = BENCHMARK_NAME + '_working_directory' DEPOT_TOOLS_GIT_REPO = ( 'https://chromium.googlesource.com/chromium/tools/depot_tools.git' ) # Using 'chromium_compile_checkout'='127.0.6533.88' and # 'chromium_compile_tools_checkout'='6e1a586bf2eb140e22caaf971ab133853e2c0c04', # the provision,prepare stages were run to install # 'chromium_compile_working_directory'. Run 'tar cvzf <dest> <src>' to create a # tarball. Move tarball to a preprovisioned data bucket in GCS. PREPROVISIONED_DATA = { 'chromium_compile_working_directory.tar.gz': ( '215d1270e24632368b7b334280b9e708025ae1ec30a58cdcfe1753c8ab264eda' ), 'chromium_compile_working_directory_2024.tar.gz': ( '22ad11eb4a86a496942873a3875464a4da950781e38b9e9b893afe983d0cc6a2' ), } TARBALL = 'chromium_compile_working_directory_2024.tar.gz' def AptInstall(vm): """Install the chromium_compile package on the VM using aptitude. Args: vm: VM to install chromium_compile on. """ scratch_dir = vm.GetScratchDir() local_working_directory = os.path.join(scratch_dir, WORKING_DIRECTORY_NAME) depot_tools_path = os.path.join(local_working_directory, 'depot_tools') src_path = os.path.join(local_working_directory, 'src') vm.Install('pip') # Required for Python 3.6 and earlier vm.RemoteCommand('sudo pip3 install importlib-metadata') # It's not clear why install-build-deps.sh does not pull these in. vm.InstallPackages('git ninja-build') is_preprovisioned = _InstallViaPreprovisionedData(vm, scratch_dir) if not is_preprovisioned: logging.info('Unable to use preprovisioned data.') vm.RemoteCommand('mkdir -p {}'.format(local_working_directory)) vm.RemoteCommand( 'cd {} && git clone {} && cd depot_tools && git checkout {}'.format( local_working_directory, DEPOT_TOOLS_GIT_REPO, CHROMIUM_COMPILE_TOOLS_CHECKOUT.value, ) ) # Check out the actual source tree. This will create src_path used below. vm.RemoteCommand( 'cd {} && PATH="$PATH:{}" fetch --nohooks chromium'.format( local_working_directory, depot_tools_path ) ) vm.RemoteCommand( 'echo ttf-mscorefonts-installer ' 'msttcorefonts/accepted-mscorefonts-eula select true ' '| sudo debconf-set-selections' ) vm_util.Retry()(vm.RemoteCommand)( f'cd {local_working_directory} && PATH="$PATH:{depot_tools_path}" ' './src/build/install-build-deps.sh --no-prompt' ) if not is_preprovisioned: vm.RemoteCommand( 'cd {} && PATH="$PATH:{}" gclient runhooks'.format( local_working_directory, depot_tools_path ) ) vm.RemoteCommand( 'cd {} && git checkout {}'.format( src_path, CHROMIUM_COMPILE_CHECKOUT.value ) ) vm.RemoteCommand( 'cd {} && PATH="$PATH:{}" ' 'gclient sync --with_branch_heads --jobs 16'.format( local_working_directory, depot_tools_path ) ) vm.RemoteCommand( 'cd {} && PATH="$PATH:{}" gn gen out/Default'.format( src_path, depot_tools_path ) ) def _InstallViaPreprovisionedData(vm, scratch_dir='.'): """Returns whether Chromium_compile was installed via preprovisioned data.""" # if the tarball is not in preprovisioned data return False if TARBALL not in PREPROVISIONED_DATA: return False if not vm.ShouldDownloadPreprovisionedData('chromium_compile', TARBALL): return False vm.InstallPreprovisionedPackageData( 'chromium_compile', [TARBALL], scratch_dir, timeout=1800 ) vm.RemoteCommand(f'cd {scratch_dir} && tar xfz {TARBALL} && rm {TARBALL}') return True def YumInstall(_): """Install the chromium_compile package on the VM using yum.""" raise NotImplementedError( 'Installation of chromium_compile is only supported on Debian.' )