diff options
author | Zhizhou Yang <zhizhouy@google.com> | 2019-03-04 17:25:28 -0800 |
---|---|---|
committer | Zhizhou Yang <zhizhouy@google.com> | 2019-03-06 23:40:20 +0000 |
commit | d8beb17b6028fbe0a9594462a6173cc16be884c5 (patch) | |
tree | 0224d615bcba33a1185ddbaa595a8837993d4692 /crosperf/results_cache.py | |
parent | a1a431178f52d1b7b8b24ea2851b509627ddb89d (diff) | |
download | toolchain-utils-d8beb17b6028fbe0a9594462a6173cc16be884c5.tar.gz |
crosperf: enabling result caching for cwp mode
This patch provides support for result caching when cwp_dso is
specified. This patch introduced cwp_dso into ResultsCache class,
so that cwp_dso info will be stored while caching. When populating
from cache, samples will be re-calculated with the perf.data file
that has been cached before.
This patch also:
1) Fixed return value of GetSamples().
2) Not need to pass weight to result.
3) Added unit tests.
BUG=chromium:905854
TEST=Passed all unit tests; Tested with --rerun=True/False, both on
cwp and general mode, to make sure cache works.
Change-Id: I297fa0aaad781b4a665a4a29bb6fdb4bca0d790b
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/third_party/toolchain-utils/+/1501458
Reviewed-by: Manoj Gupta <manojgupta@chromium.org>
Reviewed-by: Caroline Tice <cmtice@chromium.org>
Tested-by: Zhizhou Yang <zhizhouy@google.com>
Diffstat (limited to 'crosperf/results_cache.py')
-rw-r--r-- | crosperf/results_cache.py | 34 |
1 files changed, 18 insertions, 16 deletions
diff --git a/crosperf/results_cache.py b/crosperf/results_cache.py index bc932760..ed9b68c5 100644 --- a/crosperf/results_cache.py +++ b/crosperf/results_cache.py @@ -59,7 +59,6 @@ class Result(object): self.board = None self.suite = None self.cwp_dso = '' - self.weight = 0.0 self.retval = None self.out = None @@ -231,7 +230,7 @@ class Result(object): raise RuntimeError('Cannot parse perf dso result') samples += sample - return samples + return [samples, u'samples'] def GetResultsDir(self): mo = re.search(r'Results placed in (\S+)', self.out) @@ -313,7 +312,7 @@ class Result(object): value = str(misc.UnitToNumber(num_events)) self.keyvals[key] = value - def PopulateFromRun(self, out, err, retval, test, suite, cwp_dso, weight): + def PopulateFromRun(self, out, err, retval, test, suite, cwp_dso): self.board = self.label.board self.out = out self.err = err @@ -321,7 +320,6 @@ class Result(object): self.test_name = test self.suite = suite self.cwp_dso = cwp_dso - self.weight = weight self.chroot_results_dir = self.GetResultsDir() self.results_dir = misc.GetOutsideChrootPath(self.chromeos_root, self.chroot_results_dir) @@ -386,7 +384,7 @@ class Result(object): # If we are in CWP approximation mode, we want to collect DSO samples # for each perf.data file if self.cwp_dso: - self.keyvals['samples'] = [self.GetSamples(), u'samples'] + self.keyvals['samples'] = self.GetSamples() self.keyvals['retval'] = self.retval # Generate report from all perf.data files. # Now parse all perf report files and include them in keyvals. @@ -407,9 +405,10 @@ class Result(object): break return chrome_version - def PopulateFromCacheDir(self, cache_dir, test, suite): + def PopulateFromCacheDir(self, cache_dir, test, suite, cwp_dso): self.test_name = test self.suite = suite + self.cwp_dso = cwp_dso # Read in everything from the cache directory. with open(os.path.join(cache_dir, RESULTS_FILE), 'r') as f: self.out = pickle.load(f) @@ -504,13 +503,12 @@ class Result(object): retval, test, suite='telemetry_Crosperf', - cwp_dso='', - weight=0.0): + cwp_dso=''): if suite == 'telemetry': result = TelemetryResult(logger, label, log_level, machine) else: result = cls(logger, label, log_level, machine) - result.PopulateFromRun(out, err, retval, test, suite, cwp_dso, weight) + result.PopulateFromRun(out, err, retval, test, suite, cwp_dso) return result @classmethod @@ -521,13 +519,14 @@ class Result(object): machine, cache_dir, test, - suite='telemetry_Crosperf'): + suite='telemetry_Crosperf', + cwp_dso=''): if suite == 'telemetry': result = TelemetryResult(logger, label, log_level, machine) else: result = cls(logger, label, log_level, machine) try: - result.PopulateFromCacheDir(cache_dir, test, suite) + result.PopulateFromCacheDir(cache_dir, test, suite, cwp_dso) except RuntimeError as e: logger.LogError('Exception while using cache: %s' % e) @@ -542,7 +541,7 @@ class TelemetryResult(Result): super(TelemetryResult, self).__init__(logger, label, log_level, machine, cmd_exec) - def PopulateFromRun(self, out, err, retval, test, suite, cwp_dso, weight): + def PopulateFromRun(self, out, err, retval, test, suite, cwp_dso): self.out = out self.err = err self.retval = retval @@ -582,9 +581,10 @@ class TelemetryResult(Result): self.keyvals[key] = value self.keyvals['retval'] = self.retval - def PopulateFromCacheDir(self, cache_dir, test, suite): + def PopulateFromCacheDir(self, cache_dir, test, suite, cwp_dso): self.test_name = test self.suite = suite + self.cwp_dso = cwp_dso with open(os.path.join(cache_dir, RESULTS_FILE), 'r') as f: self.out = pickle.load(f) self.err = pickle.load(f) @@ -651,11 +651,12 @@ class ResultsCache(object): self.log_level = None self.show_all = None self.run_local = None + self.cwp_dso = None def Init(self, chromeos_image, chromeos_root, test_name, iteration, test_args, profiler_args, machine_manager, machine, board, cache_conditions, logger_to_use, log_level, label, share_cache, suite, - show_all_results, run_local): + show_all_results, run_local, cwp_dso): self.chromeos_image = chromeos_image self.chromeos_root = chromeos_root self.test_name = test_name @@ -675,6 +676,7 @@ class ResultsCache(object): self.log_level = log_level self.show_all = show_all_results self.run_local = run_local + self.cwp_dso = cwp_dso def GetCacheDirForRead(self): matching_dirs = [] @@ -774,7 +776,7 @@ class ResultsCache(object): self._logger.LogOutput('Trying to read from cache dir: %s' % cache_dir) result = Result.CreateFromCacheHit(self._logger, self.log_level, self.label, self.machine, cache_dir, self.test_name, - self.suite) + self.suite, self.cwp_dso) if not result: return None @@ -805,7 +807,7 @@ class MockResultsCache(ResultsCache): class MockResult(Result): """Class for mock testing, corresponding to Result class.""" - def PopulateFromRun(self, out, err, retval, test, suite, cwp_dso, weight): + def PopulateFromRun(self, out, err, retval, test, suite, cwp_dso): self.out = out self.err = err self.retval = retval |