| |
| # Copyright (c) 2013 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. |
| """Setting files for global, benchmark and labels.""" |
| |
| from __future__ import print_function |
| |
| from field import BooleanField |
| from field import IntegerField |
| from field import ListField |
| from field import TextField |
| from settings import Settings |
| |
| |
| class BenchmarkSettings(Settings): |
| """Settings used to configure individual benchmarks.""" |
| |
| def __init__(self, name): |
| super(BenchmarkSettings, self).__init__(name, 'benchmark') |
| self.AddField(TextField('test_name', |
| description='The name of the test to run. ' |
| 'Defaults to the name of the benchmark.')) |
| self.AddField(TextField('test_args', |
| description='Arguments to be passed to the ' |
| 'test.')) |
| self.AddField(IntegerField('iterations', |
| default=1, |
| description='Number of iterations to run the ' |
| 'test.')) |
| self.AddField(TextField('suite', |
| default='', |
| description='The type of the benchmark.')) |
| self.AddField(IntegerField('retries', |
| default=0, |
| description='Number of times to retry a ' |
| 'benchmark run.')) |
| self.AddField(BooleanField('run_local', |
| description='Run benchmark harness on the DUT. ' |
| 'Currently only compatible with the suite: ' |
| 'telemetry_Crosperf.', |
| required=False, |
| default=True)) |
| |
| |
| class LabelSettings(Settings): |
| """Settings for each label.""" |
| |
| def __init__(self, name): |
| super(LabelSettings, self).__init__(name, 'label') |
| self.AddField(TextField('chromeos_image', |
| required=False, |
| description='The path to the image to run tests ' |
| 'on, for local/custom-built images. See the ' |
| "'build' option for official or trybot images.")) |
| self.AddField(TextField('chromeos_root', |
| description='The path to a chromeos checkout which ' |
| 'contains a src/scripts directory. Defaults to ' |
| 'the chromeos checkout which contains the ' |
| 'chromeos_image.')) |
| self.AddField( |
| ListField('remote', |
| description='A comma-separated list of IPs of chromeos' |
| 'devices to run experiments on.')) |
| self.AddField(TextField('image_args', |
| required=False, |
| default='', |
| description='Extra arguments to pass to ' |
| 'image_chromeos.py.')) |
| self.AddField(TextField('cache_dir', |
| default='', |
| description='The cache dir for this image.')) |
| self.AddField(TextField('compiler', |
| default='gcc', |
| description='The compiler used to build the ' |
| 'ChromeOS image (gcc or llvm).')) |
| self.AddField(TextField('chrome_src', |
| description='The path to the source of chrome. ' |
| 'This is used to run telemetry benchmarks. ' |
| 'The default one is the src inside chroot.', |
| required=False, |
| default='')) |
| self.AddField(TextField('build', |
| description='The xbuddy specification for an ' |
| 'official or trybot image to use for tests. ' |
| "'/remote' is assumed, and the board is given " |
| "elsewhere, so omit the '/remote/<board>/' xbuddy " |
| 'prefix.', |
| required=False, |
| default='')) |
| |
| |
| class GlobalSettings(Settings): |
| """Settings that apply per-experiment.""" |
| |
| def __init__(self, name): |
| super(GlobalSettings, self).__init__(name, 'global') |
| self.AddField(TextField('name', |
| description='The name of the experiment. Just an ' |
| 'identifier.')) |
| self.AddField(TextField('board', |
| description='The target board for running ' |
| 'experiments on, e.g. x86-alex.')) |
| self.AddField(ListField('remote', |
| description="A comma-separated list of IPs of " |
| 'chromeos devices to run experiments on.')) |
| self.AddField(BooleanField('rerun_if_failed', |
| description='Whether to re-run failed test runs ' |
| 'or not.', |
| default=False)) |
| self.AddField(BooleanField('rm_chroot_tmp', |
| default=False, |
| description='Whether to remove the test_that ' |
| 'result in the chroot.')) |
| self.AddField(ListField('email', |
| description='Space-separated list of email ' |
| 'addresses to send email to.')) |
| self.AddField(BooleanField('rerun', |
| description='Whether to ignore the cache and ' |
| 'for tests to be re-run.', |
| default=False)) |
| self.AddField(BooleanField('same_specs', |
| default=True, |
| description='Ensure cached runs are run on the ' |
| 'same kind of devices which are specified as a ' |
| 'remote.')) |
| self.AddField(BooleanField('same_machine', |
| default=False, |
| description='Ensure cached runs are run on the ' |
| 'same remote.')) |
| self.AddField(BooleanField('use_file_locks', |
| default=False, |
| description='Whether to use the file locks ' |
| 'mechanism (deprecated) instead of the AFE ' |
| 'server lock mechanism.')) |
| self.AddField(IntegerField('iterations', |
| default=1, |
| description='Number of iterations to run all ' |
| 'tests.')) |
| self.AddField(TextField('chromeos_root', |
| description='The path to a chromeos checkout which ' |
| 'contains a src/scripts directory. Defaults to ' |
| 'the chromeos checkout which contains the ' |
| 'chromeos_image.')) |
| self.AddField(TextField('logging_level', |
| default='average', |
| description='The level of logging desired. ' |
| "Options are 'quiet', 'average', and 'verbose'.")) |
| self.AddField(IntegerField('acquire_timeout', |
| default=0, |
| description='Number of seconds to wait for ' |
| 'machine before exit if all the machines in ' |
| 'the experiment file are busy. Default is 0.')) |
| self.AddField(TextField('perf_args', |
| default='', |
| description='The optional profile command. It ' |
| 'enables perf commands to record perforamance ' |
| 'related counters. It must start with perf ' |
| 'command record or stat followed by arguments.')) |
| self.AddField(TextField('cache_dir', |
| default='', |
| description='The abs path of cache dir. ' |
| 'Default is /home/$(whoami)/cros_scratch.')) |
| self.AddField(BooleanField('cache_only', |
| default=False, |
| description='Whether to use only cached ' |
| 'results (do not rerun failed tests).')) |
| self.AddField(BooleanField('no_email', |
| default=False, |
| description='Whether to disable the email to ' |
| 'user after crosperf finishes.')) |
| self.AddField(BooleanField('json_report', |
| default=False, |
| description='Whether to generate a json version ' |
| 'of the report, for archiving.')) |
| self.AddField(BooleanField('show_all_results', |
| default=False, |
| description='When running Telemetry tests, ' |
| 'whether to all the results, instead of just ' |
| 'the default (summary) results.')) |
| self.AddField(TextField('share_cache', |
| default='', |
| description='Path to alternate cache whose data ' |
| 'you want to use. It accepts multiple directories ' |
| 'separated by a ",".')) |
| self.AddField(TextField('results_dir', |
| default='', |
| description='The results dir.')) |
| self.AddField(TextField('locks_dir', |
| default='', |
| description='An alternate directory to use for ' |
| 'storing/checking machine locks. Using this field ' |
| 'automatically sets use_file_locks to True.\n' |
| 'WARNING: If you use your own locks directory, ' |
| 'there is no guarantee that someone else might not ' |
| 'hold a lock on the same machine in a different ' |
| 'locks directory.')) |
| self.AddField(TextField('chrome_src', |
| description='The path to the source of chrome. ' |
| 'This is used to run telemetry benchmarks. ' |
| 'The default one is the src inside chroot.', |
| required=False, |
| default='')) |
| self.AddField(IntegerField('retries', |
| default=0, |
| description='Number of times to retry a ' |
| 'benchmark run.')) |
| |
| |
| class SettingsFactory(object): |
| """Factory class for building different types of Settings objects. |
| |
| This factory is currently hardcoded to produce settings for ChromeOS |
| experiment files. The idea is that in the future, other types |
| of settings could be produced. |
| """ |
| |
| def GetSettings(self, name, settings_type): |
| if settings_type == 'label' or not settings_type: |
| return LabelSettings(name) |
| if settings_type == 'global': |
| return GlobalSettings(name) |
| if settings_type == 'benchmark': |
| return BenchmarkSettings(name) |
| |
| raise TypeError("Invalid settings type: '%s'." % settings_type) |