#!/usr/bin/env python2 """ This file generates all telemetry_Benchmarks control files from a master list. """ from datetime import datetime import os import re # This test list is a subset of telemetry benchmark tests. The full list can be # obtained by executing # /build/${BOARD}/usr/local/telemetry/src/tools/perf/list_benchmarks # PLEASE READ THIS: # PERF_TESTS: these tests run on each build: tot, tot-1, tot-2 and expensive to # run. # PERF_DAILY_RUN_TESTS: these tests run on a nightly build: tot. If you are # trying to gain confidence for a new test, adding your test in this list is a # good start. # For adding a new test to any of these lists, please add rohitbm, lafeenstra, # haddowk in the change. PERF_PER_BUILD_TESTS = ( 'cros_ui_smoothness', 'jetstream', 'kraken', 'loading.desktop', 'octane', 'rendering.desktop', 'speedometer', 'speedometer2', ) PERF_DAILY_RUN_TESTS = ( 'blink_perf.image_decoder', 'cros_tab_switching.typical_24', 'dromaeo', 'media.desktop', 'memory.desktop', 'smoothness.tough_pinch_zoom_cases', 'system_health.memory_desktop', 'webrtc', ) PERF_WEEKLY_RUN_TESTS = ( ) ALL_TESTS = (PERF_PER_BUILD_TESTS + PERF_DAILY_RUN_TESTS + PERF_WEEKLY_RUN_TESTS) EXTRA_ARGS_MAP = { 'loading.desktop': '--story-tag-filter=typical', 'rendering.desktop': '--story-tag-filter=top_real_world_desktop', 'system_health.memory_desktop': '--pageset-repeat=1', } DEFAULT_YEAR = str(datetime.now().year) DEFAULT_AUTHOR = 'Chrome OS Team' CONTROLFILE_TEMPLATE = ( """# Copyright {year} The Chromium OS Authors. All rights reserved. # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. # Do not edit this file! It was created by generate_controlfiles.py. from autotest_lib.client.common_lib import utils AUTHOR = '{author}' NAME = 'telemetry_Benchmarks.{test}' {attributes} TIME = 'LONG' TEST_CATEGORY = 'Benchmark' TEST_CLASS = 'performance' TEST_TYPE = 'server' DOC = ''' This server side test suite executes the Telemetry Benchmark: {test} This is part of Chrome for Chrome OS performance testing. Pass local=True to run with local telemetry and no AFE server. ''' def run_benchmark(machine): host = hosts.create_host(machine) dargs = utils.args_to_dict(args) dargs['extra_args'] = '{extra_args}'.split() job.run_test('telemetry_Benchmarks', host=host, benchmark='{test}', tag='{test}', args=dargs) parallel_simple(run_benchmark, machines)""") def _get_suite(test): if test in PERF_PER_BUILD_TESTS: return 'ATTRIBUTES = \'suite:crosbolt_perf_perbuild\'' elif test in PERF_DAILY_RUN_TESTS: return 'ATTRIBUTES = \'suite:crosbolt_perf_nightly\'' elif test in PERF_WEEKLY_RUN_TESTS: return 'ATTRIBUTES = \'suite:crosbolt_perf_weekly\'' return '' def get_existing_fields(filename): """Returns the existing copyright year and author of the control file.""" if not os.path.isfile(filename): return (DEFAULT_YEAR, DEFAULT_AUTHOR) copyright_year = DEFAULT_YEAR author = DEFAULT_AUTHOR copyright_pattern = re.compile( '# Copyright (\d+) The Chromium OS Authors.') author_pattern = re.compile("AUTHOR = '(.+)'") with open(filename) as f: for line in f: match_year = copyright_pattern.match(line) if match_year: copyright_year = match_year.group(1) match_author = author_pattern.match(line) if match_author: author = match_author.group(1) return (copyright_year, author) def generate_control(test): """Generates control file from the template.""" filename = 'control.%s' % test copyright_year, author = get_existing_fields(filename) extra_args = EXTRA_ARGS_MAP.get(test, '') with open(filename, 'w+') as f: content = CONTROLFILE_TEMPLATE.format( attributes=_get_suite(test), author=author, extra_args=extra_args, test=test, year=copyright_year) f.write(content) def check_unmanaged_control_files(): """Prints warning if there is unmanaged control file.""" for filename in os.listdir('.'): if not filename.startswith('control.'): continue test = filename[len('control.'):] if test not in ALL_TESTS: print 'warning, unmanaged control file:', test def main(): """The main function.""" for test in ALL_TESTS: generate_control(test) check_unmanaged_control_files() if __name__ == "__main__": main()