diff --git a/utils/lit/lit/run.py b/utils/lit/lit/run.py index 7342661cc8f..3208db75615 100644 --- a/utils/lit/lit/run.py +++ b/utils/lit/lit/run.py @@ -11,20 +11,20 @@ class NopSemaphore(object): def acquire(self): pass def release(self): pass -def create_run(tests, lit_config, workers, progress_callback, max_time): +def create_run(tests, lit_config, workers, progress_callback, timeout=None): # TODO(yln) assert workers > 0 if workers == 1: - return SerialRun(tests, lit_config, progress_callback, max_time) - return ParallelRun(tests, lit_config, progress_callback, max_time, workers) + return SerialRun(tests, lit_config, progress_callback, timeout) + return ParallelRun(tests, lit_config, progress_callback, timeout, workers) class Run(object): """A concrete, configured testing run.""" - def __init__(self, tests, lit_config, progress_callback, max_time): + def __init__(self, tests, lit_config, progress_callback, timeout): self.tests = tests self.lit_config = lit_config self.progress_callback = progress_callback - self.max_time = max_time + self.timeout = timeout def execute(self): """ @@ -35,7 +35,7 @@ class Run(object): The progress_callback will be invoked for each completed test. - If max_time is non-None, it should be a time in seconds after which to + If timeout is non-None, it should be a time in seconds after which to stop executing tests. Returns the elapsed testing time. @@ -50,8 +50,12 @@ class Run(object): self.failure_count = 0 self.hit_max_failures = False + one_year = 365 * 24 * 60 * 60 # days * hours * minutes * seconds + timeout = self.timeout or one_year + start = time.time() - self._execute() + deadline = start + timeout + self._execute(deadline) end = time.time() # Mark any tests that weren't run as UNRESOLVED. @@ -91,11 +95,11 @@ class Run(object): self.hit_max_failures = True class SerialRun(Run): - def __init__(self, tests, lit_config, progress_callback, max_time): - super(SerialRun, self).__init__(tests, lit_config, progress_callback, max_time) + def __init__(self, tests, lit_config, progress_callback, timeout): + super(SerialRun, self).__init__(tests, lit_config, progress_callback, timeout) - def _execute(self): - # TODO(yln): ignores max_time + def _execute(self, deadline): + # TODO(yln): ignores deadline for test_index, test in enumerate(self.tests): lit.worker._execute_test(test, self.lit_config) self._consume_test_result((test_index, test)) @@ -103,15 +107,11 @@ class SerialRun(Run): break class ParallelRun(Run): - def __init__(self, tests, lit_config, progress_callback, max_time, workers): - super(ParallelRun, self).__init__(tests, lit_config, progress_callback, max_time) + def __init__(self, tests, lit_config, progress_callback, timeout, workers): + super(ParallelRun, self).__init__(tests, lit_config, progress_callback, timeout) self.workers = workers - def _execute(self): - one_year = 365 * 24 * 60 * 60 # days * hours * minutes * seconds - max_time = self.max_time or one_year - deadline = time.time() + max_time - + def _execute(self, deadline): semaphores = { k: NopSemaphore() if v is None else multiprocessing.BoundedSemaphore(v) for k, v in