| #!/usr/bin/python |
| |
| # 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 field import BooleanField |
| from field import FloatField |
| from field import IntegerField |
| from field import ListField |
| from field import TextField |
| from settings import Settings |
| |
| |
| class BenchmarkSettings(Settings): |
| 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")) |
| |
| |
| class LabelSettings(Settings): |
| 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 '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 ip's 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("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): |
| 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 ip's 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 remove the run_remote_test" |
| "result in the chroot")) |
| self.AddField(ListField("email", description="Space-seperated" |
| "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 " |
| "exact the same remote")) |
| 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("no_email", default=False, |
| description="Whether to disable the email to " |
| "user after crosperf finishes.")) |
| 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_users", default="", |
| description="Who's cache data you want to " |
| "use. It accepts multiple users seperated by \",\"")) |
| self.AddField(TextField("results_dir", default="", |
| description="The results dir")) |
| 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="")) |
| |
| |
| 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 Exception("Invalid settings type: '%s'." % settings_type) |