Commit f15cb8fe authored by Jakob Kummerow's avatar Jakob Kummerow Committed by Commit Bot

[tests] Make processing of test filters faster

The test driver compares command-line arguments against test names
it finds on disk. Using Python's "fnmatch" for this nicely handles
wildcards, but is relatively slow. For given test names that don't
contain any '*', we can use string equality testing, which is much
faster.

Example: the time to evaluate

 tools/run-tests.py --arch x64 --mode release \
   $(grep 'object-spread' -l -r test/test262/data/test/ | \
       sed -E 's|\.js$||' | \
       sed -E 's|^test/test262/data/test/|test262/|')

goes from "I gave up and killed the process after several minutes"
to a couple of seconds with this patch.

Change-Id: I9ec404b7516afd801fe6126347f6dff533d1977c
Reviewed-on: https://chromium-review.googlesource.com/1149196
Commit-Queue: Jakob Kummerow <jkummerow@chromium.org>
Reviewed-by: 's avatarMichael Achenbach <machenbach@chromium.org>
Cr-Commit-Position: refs/heads/master@{#54704}
parent da9386ae
......@@ -59,25 +59,25 @@ class NameFilterProc(base.TestProcFilter):
super(NameFilterProc, self).__init__()
self._globs = defaultdict(list)
self._exact_matches = defaultdict(dict)
for a in args:
argpath = a.split('/')
suitename = argpath[0]
path = '/'.join(argpath[1:]) or '*'
self._globs[suitename].append(path)
if '*' in path:
self._globs[suitename].append(path)
else:
self._exact_matches[suitename][path] = True
for s, globs in self._globs.iteritems():
if not globs or '*' in globs:
self._globs[s] = []
self._globs[s] = ['*']
def _filter(self, test):
globs = self._globs.get(test.suite.name)
if globs is None:
return True
if not globs:
return False
globs = self._globs.get(test.suite.name, [])
for g in globs:
if g == '*': return False
if fnmatch.fnmatch(test.path, g):
return False
return True
exact_matches = self._exact_matches.get(test.suite.name, {})
return test.path not in exact_matches
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment