diff options
author | Craig Tiller <ctiller@google.com> | 2015-01-14 15:59:44 -0800 |
---|---|---|
committer | Craig Tiller <ctiller@google.com> | 2015-01-14 16:32:45 -0800 |
commit | 2aa4d6494735a4292df99241d7b768a62f94f03f (patch) | |
tree | d826a39b289c5ee88932a7d1c41d0b8ed6af9d6d /tools/run_tests | |
parent | e55e1155d3f8776b5645d0e741353da0820bdd92 (diff) |
Helgrind support for run_tests.py
Also allow maxjobs to be tweaked based upon which configs are being run,
to prevent memory starvation.
Diffstat (limited to 'tools/run_tests')
-rwxr-xr-x | tools/run_tests/run_tests.py | 30 |
1 files changed, 19 insertions, 11 deletions
diff --git a/tools/run_tests/run_tests.py b/tools/run_tests/run_tests.py index 428f6c41b4..04be27bab0 100755 --- a/tools/run_tests/run_tests.py +++ b/tools/run_tests/run_tests.py @@ -15,6 +15,7 @@ import watch_dirs class SimpleConfig(object): def __init__(self, config): self.build_config = config + self.maxjobs = 32 * multiprocessing.cpu_count() def run_command(self, binary): return [binary] @@ -22,11 +23,13 @@ class SimpleConfig(object): # ValgrindConfig: compile with some CONFIG=config, but use valgrind to run class ValgrindConfig(object): - def __init__(self, config): + def __init__(self, config, tool): self.build_config = config + self.tool = tool + self.maxjobs = 4 * multiprocessing.cpu_count() def run_command(self, binary): - return ['valgrind', binary] + return ['valgrind', binary, '--tool=%s' % self.tool] # different configurations we can run under @@ -37,7 +40,8 @@ _CONFIGS = { 'msan': SimpleConfig('msan'), 'asan': SimpleConfig('asan'), 'gcov': SimpleConfig('gcov'), - 'valgrind': ValgrindConfig('dbg'), + 'memcheck': ValgrindConfig('dbg', 'memcheck'), + 'helgrind': ValgrindConfig('dbg', 'helgrind') } @@ -81,14 +85,18 @@ def _build_and_run(check_cancelled): return 1 # run all the tests - if not jobset.run(( - config.run_command(x) - for config in run_configs - for filt in filters - for x in itertools.chain.from_iterable(itertools.repeat( - glob.glob('bins/%s/%s_test' % ( - config.build_config, filt)), - runs_per_test))), check_cancelled): + if not jobset.run( + itertools.ifilter( + lambda x: x is not None, ( + config.run_command(x) + for config in run_configs + for filt in filters + for x in itertools.chain.from_iterable(itertools.repeat( + glob.glob('bins/%s/%s_test' % ( + config.build_config, filt)), + runs_per_test)))), + check_cancelled, + maxjobs=min(c.maxjobs for c in run_configs)): return 2 return 0 |