From ffcb94ce646afb5e06f545b97d959307772d2bb5 Mon Sep 17 00:00:00 2001 From: Joyee Cheung Date: Wed, 15 Oct 2025 14:03:26 +0200 Subject: [PATCH] tools: optimize wildcard execution in tools/test.py Previously for each matching test, it would execute multiple `node -p` commands to decide the configurations of the executable. That means if there are 100 tests matched, it will run the Node.js executable 4*100 times to retrieve the same configurations repeatedly. This changes the loop order so that it only execute these commands once and reuse the results for all matching tests. --- tools/test.py | 43 ++++++++++++++++++++++--------------------- 1 file changed, 22 insertions(+), 21 deletions(-) diff --git a/tools/test.py b/tools/test.py index 8457bbd939eefc..1b0159ccd9f9d7 100755 --- a/tools/test.py +++ b/tools/test.py @@ -1712,27 +1712,28 @@ def Main(): all_unused = [ ] unclassified_tests = [ ] globally_unused_rules = None - for path in paths: - for arch in options.arch: - for mode in options.mode: - vm = context.GetVm(arch, mode) - if not exists(vm): - print("Can't find shell executable: '%s'" % vm) - continue - archEngineContext = Execute([vm, "-p", "process.arch"], context) - vmArch = archEngineContext.stdout.rstrip() - if archEngineContext.exit_code != 0 or vmArch == "undefined": - print("Can't determine the arch of: '%s'" % vm) - print(archEngineContext.stderr.rstrip()) - continue - env = { - 'mode': mode, - 'system': utils.GuessOS(), - 'arch': vmArch, - 'type': get_env_type(vm, options.type, context), - 'asan': get_asan_state(vm, context), - 'pointer_compression': get_pointer_compression_state(vm, context), - } + + for arch in options.arch: + for mode in options.mode: + vm = context.GetVm(arch, mode) + if not exists(vm): + print("Can't find shell executable: '%s'" % vm) + continue + archEngineContext = Execute([vm, "-p", "process.arch"], context) + vmArch = archEngineContext.stdout.rstrip() + if archEngineContext.exit_code != 0 or vmArch == "undefined": + print("Can't determine the arch of: '%s'" % vm) + print(archEngineContext.stderr.rstrip()) + continue + env = { + 'mode': mode, + 'system': utils.GuessOS(), + 'arch': vmArch, + 'type': get_env_type(vm, options.type, context), + 'asan': get_asan_state(vm, context), + 'pointer_compression': get_pointer_compression_state(vm, context), + } + for path in paths: test_list = root.ListTests([], path, context, arch, mode) unclassified_tests += test_list cases, unused_rules = config.ClassifyTests(test_list, env)