From: machenbach@chromium.org Date: Fri, 27 Jun 2014 09:51:08 +0000 (+0000) Subject: Let test driver nuke test perf data on errors. X-Git-Tag: upstream/4.7.83~8506 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=9d0988b0fe80a0895b4ac367c18f6e52fdecddfd;p=platform%2Fupstream%2Fv8.git Let test driver nuke test perf data on errors. BUG= R=jkummerow@chromium.org Review URL: https://codereview.chromium.org/350913004 git-svn-id: https://v8.googlecode.com/svn/branches/bleeding_edge@22055 ce2b1a6d-e550-0410-aec6-3dcde31c8c00 --- diff --git a/tools/testrunner/local/execution.py b/tools/testrunner/local/execution.py index ac69eab..79f856c 100644 --- a/tools/testrunner/local/execution.py +++ b/tools/testrunner/local/execution.py @@ -27,6 +27,7 @@ import os +import shutil import time from pool import Pool @@ -60,9 +61,10 @@ def RunTest(job): class Runner(object): def __init__(self, suites, progress_indicator, context): - datapath = os.path.join("out", "testrunner_data") - self.perf_data_manager = perfdata.PerfDataManager(datapath) + self.datapath = os.path.join("out", "testrunner_data") + self.perf_data_manager = perfdata.PerfDataManager(self.datapath) self.perfdata = self.perf_data_manager.GetStore(context.arch, context.mode) + self.perf_failures = False self.tests = [ t for s in suites for t in s.tests ] if not context.no_sorting: for t in self.tests: @@ -80,6 +82,13 @@ class Runner(object): self.failed = [] self.crashed = 0 + def _RunPerfSafe(self, fun): + try: + fun() + except Exception, e: + print("PerfData exception: %s" % e) + self.perf_failures = True + def Run(self, jobs): self.indicator.Starting() self._RunInternal(jobs) @@ -130,17 +139,18 @@ class Runner(object): if test.output.HasCrashed(): self.crashed += 1 else: + self._RunPerfSafe(lambda: self.perfdata.UpdatePerfData(test)) self.succeeded += 1 self.remaining -= 1 - try: - self.perfdata.UpdatePerfData(test) - except Exception, e: - print("UpdatePerfData exception: %s" % e) - pass # Just keep working. self.indicator.HasRun(test, has_unexpected_output) finally: pool.terminate() - self.perf_data_manager.close() + self._RunPerfSafe(lambda: self.perf_data_manager.close()) + if self.perf_failures: + # Nuke perf data in case of failures. This might not work on windows as + # some files might still be open. + print "Deleting perf test data due to db corruption." + shutil.rmtree(self.datapath) if queued_exception: raise queued_exception