You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
304 lines
10 KiB
304 lines
10 KiB
# 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( |
|
'autotest_path', |
|
required=False, |
|
description='Autotest directory path relative to chroot which ' |
|
'has autotest files for the image to run tests requiring autotest files' |
|
)) |
|
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)
|
|
|