Skip to content

Commit

Permalink
benchmark: add misc/startup-cli-version benchmark
Browse files Browse the repository at this point in the history
This benchmarks the startup of various CLI tools that are already
checked into the source code. We use --version because the output
tends to be minimal and fewer operations are done to generate
these so that the startup cost is still dominated by a more
indispensible part of the CLI.
  • Loading branch information
joyeecheung committed Nov 12, 2023
1 parent 5c500b7 commit 90e9da6
Showing 1 changed file with 51 additions and 0 deletions.
51 changes: 51 additions & 0 deletions benchmark/misc/startup-cli-version.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
'use strict';
const common = require('../common.js');
const { spawnSync } = require('child_process');
const path = require('path');
const { Worker } = require('worker_threads');

Check failure on line 5 in benchmark/misc/startup-cli-version.js

View workflow job for this annotation

GitHub Actions / lint-js-and-md

'Worker' is assigned a value but never used

// This benchmarks the startup of various CLI tools that are already
// checked into the source code. We use --version because the output
// tends to be minimal and fewer operations are done to generate
// these so that the startup cost is still dominated by a more
// indispensible part of the CLI.
const bench = common.createBenchmark(main, {
cli: [
'tools/node_modules/eslint/bin/eslint.js',
'deps/npm/bin/npm-cli.js',
'deps/corepack/dist/corepack.js',
],
count: [30],
});

function spawnProcess(cli, bench, state) {
const cmd = process.execPath || process.argv[0];
while (state.finished < state.count) {
const child = spawnSync(cmd, [cli, '--version'], {
env: { npm_config_loglevel: 'silent', ...process.env },
});
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, cli }) {
cli = path.resolve(__dirname, '../../', cli);
const warmup = 3;
const state = { count, finished: -warmup };
spawnProcess(cli, bench, state);
}

0 comments on commit 90e9da6

Please sign in to comment.