| Index: tools/testrunner/local/execution.py
|
| diff --git a/tools/testrunner/local/execution.py b/tools/testrunner/local/execution.py
|
| index ac69eab3c912c81f4a7eeb78ab727a0055e6503f..79f856c7d7da21a4319edbd5424af557623336ec 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
|
|
|
|
|