aboutsummaryrefslogtreecommitdiff
path: root/crosperf/experiment_factory.py
diff options
context:
space:
mode:
Diffstat (limited to 'crosperf/experiment_factory.py')
-rw-r--r--crosperf/experiment_factory.py72
1 files changed, 72 insertions, 0 deletions
diff --git a/crosperf/experiment_factory.py b/crosperf/experiment_factory.py
new file mode 100644
index 00000000..d3c717ae
--- /dev/null
+++ b/crosperf/experiment_factory.py
@@ -0,0 +1,72 @@
+#!/usr/bin/python
+
+# Copyright 2011 Google Inc. All Rights Reserved.
+
+from benchmark import Benchmark
+from experiment import Experiment
+from label import Label
+from results_cache import CacheConditions
+
+
+class ExperimentFactory(object):
+ """Factory class for building an Experiment, given an ExperimentFile as input.
+
+ This factory is currently hardcoded to produce an experiment for running
+ ChromeOS benchmarks, but the idea is that in the future, other types
+ of experiments could be produced.
+ """
+
+ def GetExperiment(self, experiment_file, working_directory):
+ """Construct an experiment from an experiment file."""
+ global_settings = experiment_file.GetGlobalSettings()
+ experiment_name = global_settings.GetField("name")
+ remote = global_settings.GetField("remote")
+ rerun_if_failed = global_settings.GetField("rerun_if_failed")
+ chromeos_root = global_settings.GetField("chromeos_root")
+
+ # Default cache hit conditions. The image checksum in the cache and the
+ # computed checksum of the image must match. Also a cache file must exist.
+ cache_conditions = [CacheConditions.CACHE_FILE_EXISTS,
+ CacheConditions.CHECKSUMS_MATCH]
+ if global_settings.GetField("rerun_if_failed"):
+ cache_conditions.append(CacheConditions.RUN_SUCCEEDED)
+ if global_settings.GetField("rerun"):
+ cache_conditions.append(CacheConditions.FALSE)
+ if global_settings.GetField("exact_remote"):
+ cache_conditions.append(CacheConditions.REMOTES_MATCH)
+
+ # Construct benchmarks.
+ benchmarks = []
+ all_benchmark_settings = experiment_file.GetSettings("benchmark")
+ for benchmark_settings in all_benchmark_settings:
+ benchmark_name = benchmark_settings.name
+ autotest_name = benchmark_settings.GetField("autotest_name")
+ if not autotest_name:
+ autotest_name = benchmark_name
+ autotest_args = benchmark_settings.GetField("autotest_args")
+ iterations = benchmark_settings.GetField("iterations")
+ outlier_range = benchmark_settings.GetField("outlier_range")
+ profile_counters = benchmark_settings.GetField("profile_counters")
+ profile_type = benchmark_settings.GetField("profile_type")
+ benchmark = Benchmark(benchmark_name, autotest_name, autotest_args,
+ iterations, outlier_range, profile_counters,
+ profile_type)
+ benchmarks.append(benchmark)
+
+ # Construct labels.
+ labels = []
+ all_label_settings = experiment_file.GetSettings("label")
+ for label_settings in all_label_settings:
+ label_name = label_settings.name
+ image = label_settings.GetField("chromeos_image")
+ chromeos_root = label_settings.GetField("chromeos_root")
+ board = label_settings.GetField("board")
+ label = Label(label_name, image, chromeos_root, board)
+ labels.append(label)
+
+ experiment = Experiment(experiment_name, remote, rerun_if_failed,
+ working_directory, chromeos_root,
+ cache_conditions, labels, benchmarks,
+ experiment_file.Canonicalize())
+
+ return experiment