Helgrind support for run_tests.py

Also allow maxjobs to be tweaked based upon which configs are being run,
to prevent memory starvation.
pull/34/head
Craig Tiller 10 years ago
parent 1371abd306
commit d63b7896cc
  1. 32
      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,17 +23,20 @@ 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]
# SanConfig: compile with CONFIG=config, filter out incompatible binaries
class SanConfig(object):
def __init__(self, config):
self.build_config = config
self.maxjobs = 16 * multiprocessing.cpu_count()
def run_command(self, binary):
if '_ssl_' in binary:
@ -47,7 +51,8 @@ _CONFIGS = {
'msan': SanConfig('msan'),
'asan': SanConfig('asan'),
'gcov': SimpleConfig('gcov'),
'valgrind': ValgrindConfig('dbg'),
'memcheck': ValgrindConfig('dbg', 'memcheck'),
'helgrind': ValgrindConfig('dbg', 'helgrind')
}
@ -91,15 +96,18 @@ def _build_and_run(check_cancelled):
return 1
# run all the tests
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):
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

Loading…
Cancel
Save