aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcmtice <cmtice@google.com>2014-05-29 16:16:25 -0700
committerchrome-internal-fetch <chrome-internal-fetch@google.com>2014-06-02 22:21:14 +0000
commit2a370f7af34f6b126e80ef55891b9bff6a2858bb (patch)
tree96bab70d1745bccd2fdc06b3662738e4db314852
parent4d24b3a0e8a8fae5ac9cf00c3889288c0571b1fc (diff)
downloadtoolchain-utils-2a370f7af34f6b126e80ef55891b9bff6a2858bb.tar.gz
Add --cache_only global setting to crosperf.
The CL adds a new setting, --cache_only, which causes crosperf to ONLY report test results that it finds in the cache (it will NOT rerun any tests, even if no cache results are found). This is partly for implementing a weekly summary report, where we want to compare the nightly results from the past week, but not actually rerun anything. BUG=None TEST=I tested this option while generating weekly test reports, and it worked as it is supposed to. Change-Id: Icb1f5343f76ce999bebd0810bb86ab64a7577313 Reviewed-on: https://chrome-internal-review.googlesource.com/164890 Reviewed-by: Yunlian Jiang <yunlian@google.com> Commit-Queue: Caroline Tice <cmtice@google.com> Tested-by: Caroline Tice <cmtice@google.com>
-rw-r--r--crosperf/benchmark_run.py12
-rwxr-xr-xcrosperf/benchmark_run_unittest.py4
-rw-r--r--crosperf/experiment_factory.py5
-rw-r--r--crosperf/label.py6
-rwxr-xr-xcrosperf/machine_manager_unittest.py4
-rw-r--r--crosperf/mock_instance.py4
-rwxr-xr-xcrosperf/results_cache_unittest.py2
-rw-r--r--crosperf/settings_factory.py3
8 files changed, 29 insertions, 11 deletions
diff --git a/crosperf/benchmark_run.py b/crosperf/benchmark_run.py
index e4fe693d..f35b6928 100644
--- a/crosperf/benchmark_run.py
+++ b/crosperf/benchmark_run.py
@@ -97,6 +97,18 @@ class BenchmarkRun(threading.Thread):
self._logger.LogOutput(self.result.out, print_to_console=False)
self._logger.LogError(self.result.err, print_to_console=False)
+ elif self.label.cache_only:
+ self._logger.LogOutput("%s: No cache hit." % self.name)
+ output = "%s: No Cache hit." % self.name
+ retval = 1
+ err = "No cache hit."
+ self.result = Result.CreateFromRun(self._logger, self.log_level,
+ self.label,
+ output, err, retval,
+ self.benchmark.show_all_results,
+ self.benchmark.test_name,
+ self.benchmark.suite)
+
else:
self._logger.LogOutput("%s: No cache hit." % self.name)
self.timeline.Record(STATUS_WAITING)
diff --git a/crosperf/benchmark_run_unittest.py b/crosperf/benchmark_run_unittest.py
index a42e4598..d13806e8 100755
--- a/crosperf/benchmark_run_unittest.py
+++ b/crosperf/benchmark_run_unittest.py
@@ -44,7 +44,7 @@ class BenchmarkRunTest(unittest.TestCase):
self.test_label = MockLabel("test1", "image1", "/tmp/test_benchmark_run",
"x86-alex", "chromeos2-row1-rack4-host9.cros",
image_args="",
- cache_dir="")
+ cache_dir="", cache_only=False)
self.test_cache_conditions = [CacheConditions.CACHE_FILE_EXISTS,
CacheConditions.CHECKSUMS_MATCH]
@@ -57,7 +57,7 @@ class BenchmarkRunTest(unittest.TestCase):
my_label = MockLabel("test1", "image1", "/tmp/test_benchmark_run",
"x86-alex", "chromeos2-row1-rack4-host9.cros",
image_args="",
- cache_dir="")
+ cache_dir="", cache_only=False)
logging_level = "average"
m = MockMachineManager("/tmp/chromeos_root", 0, logging_level)
m.AddMachine("chromeos2-row1-rack4-host9.cros")
diff --git a/crosperf/experiment_factory.py b/crosperf/experiment_factory.py
index 97d862a0..86bf19cd 100644
--- a/crosperf/experiment_factory.py
+++ b/crosperf/experiment_factory.py
@@ -104,6 +104,7 @@ class ExperimentFactory(object):
perf_args = global_settings.GetField("perf_args")
acquire_timeout= global_settings.GetField("acquire_timeout")
cache_dir = global_settings.GetField("cache_dir")
+ cache_only = global_settings.GetField("cache_only")
config.AddConfig("no_email", global_settings.GetField("no_email"))
share_users = global_settings.GetField("share_users")
results_dir = global_settings.GetField("results_dir")
@@ -198,10 +199,10 @@ class ExperimentFactory(object):
image_args = label_settings.GetField("image_args")
if test_flag.GetTestMode():
label = MockLabel(label_name, image, chromeos_root, board, my_remote,
- image_args, cache_dir, chrome_src)
+ image_args, cache_dir, cache_only, chrome_src)
else:
label = Label(label_name, image, chromeos_root, board, my_remote,
- image_args, cache_dir, chrome_src)
+ image_args, cache_dir, cache_only, chrome_src)
labels.append(label)
email = global_settings.GetField("email")
diff --git a/crosperf/label.py b/crosperf/label.py
index bbcf18ae..91f6e97e 100644
--- a/crosperf/label.py
+++ b/crosperf/label.py
@@ -13,7 +13,7 @@ from utils import misc
class Label(object):
def __init__(self, name, chromeos_image, chromeos_root, board, remote,
- image_args, cache_dir, chrome_src=None):
+ image_args, cache_dir, cache_only, chrome_src=None):
self.image_type = self._GetImageType(chromeos_image)
@@ -28,6 +28,7 @@ class Label(object):
self.remote = remote
self.image_args = image_args
self.cache_dir = cache_dir
+ self.cache_only = cache_only
if not chromeos_root:
if self.image_type == "local":
@@ -68,12 +69,13 @@ class Label(object):
class MockLabel(object):
def __init__(self, name, chromeos_image, chromeos_root, board, remote,
- image_args, cache_dir, chrome_src=None):
+ image_args, cache_dir, cache_only, chrome_src=None):
self.name = name
self.chromeos_image = chromeos_image
self.board = board
self.remote = remote
self.cache_dir = cache_dir
+ self.cache_only = cache_only
if not chromeos_root:
self.chromeos_root = "/tmp/chromeos_root"
else:
diff --git a/crosperf/machine_manager_unittest.py b/crosperf/machine_manager_unittest.py
index 10a34884..059ce20a 100755
--- a/crosperf/machine_manager_unittest.py
+++ b/crosperf/machine_manager_unittest.py
@@ -32,10 +32,10 @@ CHROMEOS_ROOT = "/tmp/chromeos-root"
MACHINE_NAMES = ["lumpy1", "lumpy2", "lumpy3", "daisy1", "daisy2"]
LABEL_LUMPY = label.MockLabel("lumpy", "image", CHROMEOS_ROOT, "lumpy",
["lumpy1", "lumpy2", "lumpy3", "lumpy4"],
- "", "", "")
+ "", "", False, "")
LABEL_MIX = label.MockLabel("mix", "image", CHROMEOS_ROOT, "mix",
["daisy1", "daisy2", "lumpy3", "lumpy4"],
- "", "", "")
+ "", "", False, "")
class MachineManagerTest(unittest.TestCase):
diff --git a/crosperf/mock_instance.py b/crosperf/mock_instance.py
index 74fc21b3..06a574ae 100644
--- a/crosperf/mock_instance.py
+++ b/crosperf/mock_instance.py
@@ -16,12 +16,12 @@ perf_args = "record -a -e cycles"
label1 = MockLabel("test1", "image1", "/tmp/test_benchmark_run",
"x86-alex", "chromeos-alex1",
image_args="",
- cache_dir="")
+ cache_dir="", cache_only=False)
label2 = MockLabel("test2", "image2", "/tmp/test_benchmark_run_2",
"x86-alex", "chromeos-alex2",
image_args="",
- cache_dir="")
+ cache_dir="", cache_only=False)
benchmark1 = Benchmark("benchmark1", "autotest_name_1",
"autotest_args", 2, "", perf_args, "", "")
diff --git a/crosperf/results_cache_unittest.py b/crosperf/results_cache_unittest.py
index 099aed81..6713a3eb 100755
--- a/crosperf/results_cache_unittest.py
+++ b/crosperf/results_cache_unittest.py
@@ -126,7 +126,7 @@ class MockResult(Result):
class ResultTest(unittest.TestCase):
mock_label = MockLabel("mock_label", "chromeos_image", "/tmp", "lumpy",
- "remote", "image_args", "cache_dir")
+ "remote", "image_args", "cache_dir", False)
def testCreateFromRun(self):
result = MockResult.CreateFromRun(logger.GetLogger(), "average",
self.mock_label,
diff --git a/crosperf/settings_factory.py b/crosperf/settings_factory.py
index a5b0a549..78abbc82 100644
--- a/crosperf/settings_factory.py
+++ b/crosperf/settings_factory.py
@@ -117,6 +117,9 @@ class GlobalSettings(Settings):
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."))