[lit] Move computation of deadline up into base class
authorJulian Lettner <jlettner@apple.com>
Thu, 17 Oct 2019 21:12:45 +0000 (21:12 +0000)
committerJulian Lettner <jlettner@apple.com>
Thu, 17 Oct 2019 21:12:45 +0000 (21:12 +0000)
llvm-svn: 375171

llvm/utils/lit/lit/run.py

index 7342661..3208db7 100644 (file)
@@ -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