Skip to content

Commit

Permalink
[lit] Set --single-process for single tests and --threads=1
Browse files Browse the repository at this point in the history
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

llvm-svn: 354068
  • Loading branch information
yln committed Feb 14, 2019
1 parent 9e5e868 commit 96adb78
Show file tree
Hide file tree
Showing 6 changed files with 19 additions and 17 deletions.
3 changes: 1 addition & 2 deletions llvm/utils/lit/lit/LitConfig.py
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand All @@ -37,7 +37,6 @@ def __init__(self, progname, path, quiet,
self.valgrindUserArgs = list(valgrindArgs)
self.noExecute = noExecute
self.debug = debug
self.singleProcess = singleProcess
self.isWindows = bool(isWindows)
self.params = dict(params)
self.bashPath = None
Expand Down
1 change: 0 additions & 1 deletion llvm/utils/lit/lit/discovery.py
Original file line number Diff line number Diff line change
Expand Up @@ -262,7 +262,6 @@ def load_test_suite(inputs):
useValgrind = False,
valgrindLeakCheck = False,
valgrindArgs = [],
singleProcess=False,
noExecute = False,
debug = False,
isWindows = (platform.system()=='Windows'),
Expand Down
23 changes: 13 additions & 10 deletions llvm/utils/lit/lit/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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,
Expand Down Expand Up @@ -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)

Expand All @@ -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:
Expand Down
6 changes: 4 additions & 2 deletions llvm/utils/lit/lit/run.py
Original file line number Diff line number Diff line change
Expand Up @@ -133,7 +133,7 @@ def execute_tests(self, display, jobs, max_time=None):
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
Expand All @@ -142,12 +142,14 @@ def execute_tests(self, display, jobs, max_time=None):

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)

Expand Down
2 changes: 1 addition & 1 deletion llvm/utils/lit/tests/max-failures.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
1 change: 0 additions & 1 deletion llvm/utils/lit/tests/unit/TestRunner.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,6 @@ def load_keyword_parser_lit_tests():
quiet=False,
useValgrind=False,
valgrindLeakCheck=False,
singleProcess=False,
valgrindArgs=[],
noExecute=False,
debug=False,
Expand Down

0 comments on commit 96adb78

Please sign in to comment.