mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-01-31 20:51:52 +01:00
[lit] Allow setting parallelism groups to None
Check that we do not crash if a parallelism group is explicitly set to None. Permits usage of the following pattern. [lit.common.cfg] lit_config.parallelism_groups['my_group'] = None if <condition>: lit_config.parallelism_groups['my_group'] = 3 [project/lit.cfg] config.parallelism_group = 'my_group' Reviewers: rnk Differential Revision: https://reviews.llvm.org/D58305 llvm-svn: 354912
This commit is contained in:
parent
c11602adf4
commit
de25aa2b54
@ -106,7 +106,7 @@ class TestingConfig:
|
||||
environment, substitutions, unsupported,
|
||||
test_exec_root, test_source_root, excludes,
|
||||
available_features, pipefail, limit_to_features = [],
|
||||
is_early = False, parallelism_group = ""):
|
||||
is_early = False, parallelism_group = None):
|
||||
self.parent = parent
|
||||
self.name = str(name)
|
||||
self.suffixes = set(suffixes)
|
||||
|
@ -17,6 +17,12 @@ class _Display(object):
|
||||
if self.failedCount == self.maxFailures:
|
||||
self.provider.cancel()
|
||||
|
||||
# No-operation semaphore for supporting `None` for parallelism_groups.
|
||||
# lit_config.parallelism_groups['my_group'] = None
|
||||
class NopSemaphore(object):
|
||||
def acquire(self): pass
|
||||
def release(self): pass
|
||||
|
||||
class Run(object):
|
||||
"""
|
||||
This class represents a concrete, configured testing run.
|
||||
@ -26,11 +32,10 @@ class Run(object):
|
||||
self.lit_config = lit_config
|
||||
self.tests = tests
|
||||
# Set up semaphores to limit parallelism of certain classes of tests.
|
||||
# For example, some ASan tests require lots of virtual memory and run
|
||||
# faster with less parallelism on OS X.
|
||||
self.parallelism_semaphores = \
|
||||
{k: multiprocessing.BoundedSemaphore(v) for k, v in
|
||||
self.lit_config.parallelism_groups.items()}
|
||||
self.parallelism_semaphores = {
|
||||
k : NopSemaphore() if v is None else
|
||||
multiprocessing.BoundedSemaphore(v)
|
||||
for k, v in lit_config.parallelism_groups.items()}
|
||||
|
||||
def execute_tests_in_pool(self, jobs, max_time):
|
||||
# We need to issue many wait calls, so compute the final deadline and
|
||||
|
11
utils/lit/tests/Inputs/parallelism-groups/lit.cfg
Normal file
11
utils/lit/tests/Inputs/parallelism-groups/lit.cfg
Normal file
@ -0,0 +1,11 @@
|
||||
import lit.formats
|
||||
config.name = 'parallelism-groups'
|
||||
config.suffixes = ['.txt']
|
||||
config.test_format = lit.formats.ShTest()
|
||||
config.test_source_root = None
|
||||
config.test_exec_root = None
|
||||
|
||||
# Should not crash
|
||||
lit_config.parallelism_groups['my_group'] = None
|
||||
|
||||
config.parallelism_group = 'my_group'
|
1
utils/lit/tests/Inputs/parallelism-groups/test1.txt
Normal file
1
utils/lit/tests/Inputs/parallelism-groups/test1.txt
Normal file
@ -0,0 +1 @@
|
||||
# RUN: true
|
1
utils/lit/tests/Inputs/parallelism-groups/test2.txt
Normal file
1
utils/lit/tests/Inputs/parallelism-groups/test2.txt
Normal file
@ -0,0 +1 @@
|
||||
# RUN: true
|
21
utils/lit/tests/parallelism-groups.py
Normal file
21
utils/lit/tests/parallelism-groups.py
Normal file
@ -0,0 +1,21 @@
|
||||
# Check that we do not crash if a parallelism group is set to None. Permits
|
||||
# usage of the following pattern.
|
||||
#
|
||||
# [lit.common.cfg]
|
||||
# lit_config.parallelism_groups['my_group'] = None
|
||||
# if <condition>:
|
||||
# lit_config.parallelism_groups['my_group'] = 3
|
||||
#
|
||||
# [project/lit.cfg]
|
||||
# config.parallelism_group = 'my_group'
|
||||
#
|
||||
# Note: We need at least 2 tests to prevent lit from using "single process
|
||||
# mode", which ignores parallelism groups.
|
||||
#
|
||||
|
||||
# RUN: %{lit} -j2 %{inputs}/parallelism-groups | FileCheck %s
|
||||
|
||||
# CHECK: -- Testing: 2 tests, 2 threads --
|
||||
# CHECK-DAG: PASS: parallelism-groups :: test1.txt
|
||||
# CHECK-DAG: PASS: parallelism-groups :: test2.txt
|
||||
# CHECK: Expected Passes : 2
|
Loading…
x
Reference in New Issue
Block a user