'use strict'; const common = require('../common.js'); const path = require('path'); const { spawnSync } = require('child_process'); function mockFiles(n, prefix = '/tmp') { const files = []; for (let i = 0; i < n; ++i) { files.push(prefix + '/file' + i + '.js'); } return files; } const bench = common.createBenchmark(main, { script: [ 'test/fixtures/semicolon', ], prefixPath: ['/tmp'], nFiles: [10, 100, 1000], count: [30], }); function spawnProcess(script, bench, state) { const cmd = process.execPath || process.argv[0]; while (state.finished < state.count) { const child = spawnSync(cmd, script); if (child.status !== 0) { console.log('---- STDOUT ----'); console.log(child.stdout.toString()); console.log('---- STDERR ----'); console.log(child.stderr.toString()); throw new Error(`Child process stopped with exit code ${child.status}`); } state.finished++; if (state.finished === 0) { // Finished warmup. bench.start(); } if (state.finished === state.count) { bench.end(state.count); } } } function main({ count, script, nFiles, prefixPath }) { script = path.resolve(__dirname, '../../', `${script}.js`); const optionsWithScript = [ '--experimental-permission', `--allow-fs-read=${script}`, ...mockFiles(nFiles, prefixPath).map((file) => '--allow-fs-read=' + file), script, ]; const warmup = 3; const state = { count, finished: -warmup }; spawnProcess(optionsWithScript, bench, state); }