From: Julian Lettner Date: Thu, 14 Feb 2019 22:30:07 +0000 (+0000) Subject: [lit] Set --single-process for single tests and --threads=1 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=75b1901bac12016a63d95ac3e9da83a2f0844653;p=llvm [lit] Set --single-process for single tests and --threads=1 Summary: Automatically upgrade debugging experience (single process, no thread pool) when: 1) we only run a single test 2) user specifies `-j1` Details: Fix `--max-failures` in single process mode. Option did not have an effect in single process mode. Add display feedback for single process mode. Adapted test. Improve argument checking (require positive integers). `--single-process` is now essentially an alias for `-j1`. Should we remove it? Reviewers: rnk Differential Revision: https://reviews.llvm.org/D58249 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@354068 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/utils/lit/lit/LitConfig.py b/utils/lit/lit/LitConfig.py index 97c09108581..31eeb76288b 100644 --- a/utils/lit/lit/LitConfig.py +++ b/utils/lit/lit/LitConfig.py @@ -21,7 +21,7 @@ class LitConfig(object): def __init__(self, progname, path, quiet, useValgrind, valgrindLeakCheck, valgrindArgs, - noExecute, debug, isWindows, singleProcess, + noExecute, debug, isWindows, params, config_prefix = None, maxIndividualTestTime = 0, maxFailures = None, @@ -37,7 +37,6 @@ class LitConfig(object): self.valgrindUserArgs = list(valgrindArgs) self.noExecute = noExecute self.debug = debug - self.singleProcess = singleProcess self.isWindows = bool(isWindows) self.params = dict(params) self.bashPath = None diff --git a/utils/lit/lit/discovery.py b/utils/lit/lit/discovery.py index 398b6cecd5a..c4d30319c47 100644 --- a/utils/lit/lit/discovery.py +++ b/utils/lit/lit/discovery.py @@ -262,7 +262,6 @@ def load_test_suite(inputs): useValgrind = False, valgrindLeakCheck = False, valgrindArgs = [], - singleProcess=False, noExecute = False, debug = False, isWindows = (platform.system()=='Windows'), diff --git a/utils/lit/lit/main.py b/utils/lit/lit/main.py index 807360ac5b9..20b001e66da 100755 --- a/utils/lit/lit/main.py +++ b/utils/lit/lit/main.py @@ -336,11 +336,11 @@ def main_with_tmp(builtinParameters): if not args: parser.error('No inputs specified') - if opts.numThreads is None: - opts.numThreads = lit.util.detectCPUs() + if opts.numThreads is not None and opts.numThreads <= 0: + parser.error("Option '--threads' or '-j' requires positive integer") - if opts.maxFailures == 0: - parser.error("Setting --max-failures to 0 does not have any effect.") + if opts.maxFailures is not None and opts.maxFailures <= 0: + parser.error("Option '--max-failures' requires positive integer") if opts.echoAllCommands: opts.showOutput = True @@ -374,7 +374,6 @@ def main_with_tmp(builtinParameters): valgrindLeakCheck = opts.valgrindLeakCheck, valgrindArgs = opts.valgrindArgs, noExecute = opts.noExecute, - singleProcess = opts.singleProcess, debug = opts.debug, isWindows = isWindows, params = userParams, @@ -481,6 +480,12 @@ def main_with_tmp(builtinParameters): if opts.maxTests is not None: run.tests = run.tests[:opts.maxTests] + # Determine number of workers to use. + if opts.singleProcess: + opts.numThreads = 1 + elif opts.numThreads is None: + opts.numThreads = lit.util.detectCPUs() + # Don't create more threads than tests. opts.numThreads = min(len(run.tests), opts.numThreads) @@ -506,11 +511,9 @@ def main_with_tmp(builtinParameters): except: pass - extra = '' - if len(run.tests) != numTotalTests: - extra = ' of %d' % numTotalTests - header = '-- Testing: %d%s tests, %d threads --'%(len(run.tests), extra, - opts.numThreads) + extra = (' of %d' % numTotalTests) if (len(run.tests) != numTotalTests) else '' + threads = 'single process' if (opts.numThreads == 1) else ('%d threads' % opts.numThreads) + header = '-- Testing: %d%s tests, %s --' % (len(run.tests), extra, threads) progressBar = None if not opts.quiet: if opts.succinct and opts.useProgressBar: diff --git a/utils/lit/lit/run.py b/utils/lit/lit/run.py index c4f9eb2d0fc..a6de83eb3c2 100644 --- a/utils/lit/lit/run.py +++ b/utils/lit/lit/run.py @@ -133,7 +133,7 @@ class Run(object): be given an UNRESOLVED result. """ # Don't do anything if we aren't going to run any tests. - if not self.tests or jobs == 0: + if not self.tests: return # Save the display object on the runner so that we can update it from @@ -142,12 +142,14 @@ class Run(object): self.failure_count = 0 self.hit_max_failures = False - if self.lit_config.singleProcess: + if jobs == 1: global child_lit_config child_lit_config = self.lit_config for test_index, test in enumerate(self.tests): result = worker_run_one_test(test_index, test) self.consume_test_result(result) + if self.hit_max_failures: + break else: self.execute_tests_in_pool(jobs, max_time) diff --git a/utils/lit/tests/max-failures.py b/utils/lit/tests/max-failures.py index ca107bc29b9..f37f73d7add 100644 --- a/utils/lit/tests/max-failures.py +++ b/utils/lit/tests/max-failures.py @@ -11,4 +11,4 @@ # CHECK: Failing Tests (27) # CHECK: Failing Tests (1) # CHECK: Failing Tests (2) -# CHECK: error: Setting --max-failures to 0 does not have any effect. +# CHECK: error: Option '--max-failures' requires positive integer diff --git a/utils/lit/tests/unit/TestRunner.py b/utils/lit/tests/unit/TestRunner.py index a9cfd869b76..27166cd69a2 100644 --- a/utils/lit/tests/unit/TestRunner.py +++ b/utils/lit/tests/unit/TestRunner.py @@ -29,7 +29,6 @@ class TestIntegratedTestKeywordParser(unittest.TestCase): quiet=False, useValgrind=False, valgrindLeakCheck=False, - singleProcess=False, valgrindArgs=[], noExecute=False, debug=False,