aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--crosperf/benchmark_run.py3
-rw-r--r--crosperf/experiment_runner.py5
-rw-r--r--crosperf/results_cache.py24
-rw-r--r--crosperf/results_organizer.py12
-rw-r--r--crosperf/results_report.py19
5 files changed, 46 insertions, 17 deletions
diff --git a/crosperf/benchmark_run.py b/crosperf/benchmark_run.py
index f8bc3793..9be4238a 100644
--- a/crosperf/benchmark_run.py
+++ b/crosperf/benchmark_run.py
@@ -107,7 +107,7 @@ class BenchmarkRun(threading.Thread):
retval = 1
err = "No cache hit."
self.result = Result.CreateFromRun(self._logger, self.log_level,
- self.label,
+ self.label, self.machine,
output, err, retval,
self.benchmark.show_all_results,
self.benchmark.test_name,
@@ -225,6 +225,7 @@ class BenchmarkRun(threading.Thread):
return Result.CreateFromRun(self._logger,
self.log_level,
self.label,
+ self.machine,
out,
err,
retval,
diff --git a/crosperf/experiment_runner.py b/crosperf/experiment_runner.py
index 73e9fe38..ec74fdb1 100644
--- a/crosperf/experiment_runner.py
+++ b/crosperf/experiment_runner.py
@@ -139,8 +139,9 @@ class ExperimentRunner(object):
br.label, br.share_cache, br.benchmark.suite,
br.benchmark.show_all_results, br.benchmark.run_local)
cache_dir = cache._GetCacheDirForWrite()
- self.l.LogOutput("Removing cache dir: %s" % cache_dir)
- shutil.rmtree(cache_dir)
+ if os.path.exists(cache_dir):
+ self.l.LogOutput("Removing cache dir: %s" % cache_dir)
+ shutil.rmtree(cache_dir)
def _Run(self, experiment):
try:
diff --git a/crosperf/results_cache.py b/crosperf/results_cache.py
index 5d0f96e3..b42ec78f 100644
--- a/crosperf/results_cache.py
+++ b/crosperf/results_cache.py
@@ -36,7 +36,7 @@ class Result(object):
perf.report, etc. The key generation is handled by the ResultsCache class.
"""
- def __init__(self, logger, label, log_level, cmd_exec=None):
+ def __init__(self, logger, label, log_level, machine, cmd_exec=None):
self._chromeos_root = label.chromeos_root
self._logger = logger
self._ce = cmd_exec or command_executer.GetCommandExecuter(self._logger,
@@ -45,6 +45,7 @@ class Result(object):
self.label = label
self.results_dir = None
self.log_level = log_level
+ self.machine = machine
self.perf_data_files = []
self.perf_report_files = []
@@ -331,6 +332,7 @@ class Result(object):
pickle.dump(self.retval, f)
with open(os.path.join(temp_dir, CACHE_KEYS_FILE), "w") as f:
+ f.write("%s\n" % self.machine.checksum_string)
for k in key_list:
f.write(k)
f.write("\n")
@@ -366,22 +368,22 @@ class Result(object):
(temp_dir, cache_dir))
@classmethod
- def CreateFromRun(cls, logger, log_level, label, out, err, retval, show_all,
- test, suite="telemetry_Crosperf"):
+ def CreateFromRun(cls, logger, log_level, label, machine, out, err, retval,
+ show_all, test, suite="telemetry_Crosperf"):
if suite == "telemetry":
- result = TelemetryResult(logger, label, log_level)
+ result = TelemetryResult(logger, label, log_level, machine)
else:
- result = cls(logger, label, log_level)
+ result = cls(logger, label, log_level, machine)
result._PopulateFromRun(out, err, retval, show_all, test, suite)
return result
@classmethod
- def CreateFromCacheHit(cls, logger, log_level, label, cache_dir,
+ def CreateFromCacheHit(cls, logger, log_level, label, machine, cache_dir,
show_all, test, suite="telemetry_Crosperf"):
if suite == "telemetry":
- result = TelemetryResult(logger, label)
+ result = TelemetryResult(logger, label, log_level, machine)
else:
- result = cls(logger, label, log_level)
+ result = cls(logger, label, log_level, machine)
try:
result._PopulateFromCacheDir(cache_dir, show_all, test, suite)
@@ -393,8 +395,9 @@ class Result(object):
class TelemetryResult(Result):
- def __init__(self, logger, label, log_level, cmd_exec=None):
- super(TelemetryResult, self).__init__(logger, label, log_level, cmd_exec)
+ def __init__(self, logger, label, log_level, machine, cmd_exec=None):
+ super(TelemetryResult, self).__init__(logger, label, log_level, machine,
+ cmd_exec)
def _PopulateFromRun(self, out, err, retval, show_all, test, suite):
self.out = out
@@ -600,6 +603,7 @@ class ResultsCache(object):
result = Result.CreateFromCacheHit(self._logger,
self.log_level,
self.label,
+ self.machine,
cache_dir,
self.show_all,
self.test_name,
diff --git a/crosperf/results_organizer.py b/crosperf/results_organizer.py
index 0460b6e9..5395d8e4 100644
--- a/crosperf/results_organizer.py
+++ b/crosperf/results_organizer.py
@@ -29,7 +29,8 @@ class ResultOrganizer(object):
]}.
"""
- def __init__(self, benchmark_runs, labels, benchmarks=None):
+ def __init__(self, benchmark_runs, labels, benchmarks=None,
+ json_report=False):
self.result = {}
self.labels = []
self.prog = re.compile(r"(\w+)\{(\d+)\}")
@@ -40,7 +41,10 @@ class ResultOrganizer(object):
self.labels.append(label.name)
for benchmark_run in benchmark_runs:
benchmark_name = benchmark_run.benchmark.name
- show_all_results = benchmark_run.benchmark.show_all_results
+ if json_report:
+ show_all_results = True
+ else:
+ show_all_results = benchmark_run.benchmark.show_all_results
if benchmark_name not in self.result:
self.result[benchmark_name] = []
while len(self.result[benchmark_name]) < len(labels):
@@ -66,6 +70,10 @@ class ResultOrganizer(object):
continue
result_value = benchmark_run.result.keyvals[test_key]
cur_dict[test_key] = result_value
+ if json_report and benchmark_run.machine:
+ cur_dict['machine'] = benchmark_run.machine.name
+ cur_dict['machine_checksum'] = benchmark_run.machine.checksum
+ cur_dict['machine_string'] = benchmark_run.machine.checksum_string
self._DuplicatePass()
def _GetSummaryResults (self, test_name):
diff --git a/crosperf/results_report.py b/crosperf/results_report.py
index f1b71810..4c7bd085 100644
--- a/crosperf/results_report.py
+++ b/crosperf/results_report.py
@@ -568,7 +568,8 @@ class JSONResultsReport(ResultsReport):
super(JSONResultsReport, self).__init__(experiment)
self.ro = ResultOrganizer(experiment.benchmark_runs,
experiment.labels,
- experiment.benchmarks)
+ experiment.benchmarks,
+ json_report=True)
self.date = date
self.time = time
self.defaults = TelemetryDefaults()
@@ -592,11 +593,18 @@ class JSONResultsReport(ResultsReport):
json_results['date'] = self.date
json_results['time'] = self.time
json_results['board'] = board
+ json_results['label'] = label
+ common_checksum = ''
+ common_string = ''
for l in self.experiment.labels:
if l.name == label:
ver, img = ParseChromeosImage(l.chromeos_image)
json_results['chromeos_image'] = img
json_results['chromeos_version'] = ver
+ common_checksum = \
+ self.experiment.machine_manager.machine_checksum[l.name]
+ common_string = \
+ self.experiment.machine_manager.machine_checksum_string[l.name]
break
json_results['test_name'] = test
if not iter_results or iter_results['retval'] != 0:
@@ -622,7 +630,14 @@ class JSONResultsReport(ResultsReport):
if type(v) == list:
v = v[0]
if v != 'PASS':
- detail_results[k] = float(v)
+ if k.find('machine') == -1:
+ detail_results[k] = float(v)
+ else:
+ json_results[k] = v
+ if 'machine_checksum' not in json_results.keys():
+ json_results['machine_checksum'] = common_checksum
+ if 'machine_string' not in json_results.keys():
+ json_results['machine_string'] = common_string
json_results['detailed_results'] = detail_results
final_results.append(json_results)