Bug 1900847 - Use posix_spawnp instead of fork/execvp for JS shell tests. r=mgaudet

`fork` can be slow, especially for jstests. This reduces our jstests time from
~140 seconds to ~100 seconds on my machine.

`os.posix_spawnp` is available since Python 3.8 and conveniently that's also the
minimum Python version we currently require.

Differential Revision: https://phabricator.services.mozilla.com/D212777
This commit is contained in:
Jan de Mooij 2024-06-07 07:50:50 +00:00
parent 8d1c9d2b83
commit d3824dae47

View file

@ -35,26 +35,24 @@ def spawn_test(test, prefix, tempdir, passthrough, run_skipped, show_cmd):
if show_cmd: if show_cmd:
print(escape_cmdline(cmd)) print(escape_cmdline(cmd))
if not passthrough: if passthrough:
(rout, wout) = os.pipe() os.execvp(cmd[0], cmd)
(rerr, werr) = os.pipe() return
rv = os.fork() (rout, wout) = os.pipe()
(rerr, werr) = os.pipe()
# Parent. file_actions = [
if rv: (os.POSIX_SPAWN_CLOSE, rout),
os.close(wout) (os.POSIX_SPAWN_CLOSE, rerr),
os.close(werr) (os.POSIX_SPAWN_DUP2, wout, 1),
return Task(test, prefix, tempdir, rv, rout, rerr) (os.POSIX_SPAWN_DUP2, werr, 2),
]
pid = os.posix_spawnp(cmd[0], cmd, os.environ, file_actions=file_actions)
# Child. os.close(wout)
os.close(rout) os.close(werr)
os.close(rerr) return Task(test, prefix, tempdir, pid, rout, rerr)
os.dup2(wout, 1)
os.dup2(werr, 2)
os.execvp(cmd[0], cmd)
def get_max_wait(tasks, timeout): def get_max_wait(tasks, timeout):