diff options
author | Florian Dold <florian.dold@gmail.com> | 2019-04-03 15:43:32 +0200 |
---|---|---|
committer | Florian Dold <florian.dold@gmail.com> | 2019-04-03 15:45:57 +0200 |
commit | 71e285b94c7edaa43aa8115965cf5a36b8e0f80a (patch) | |
tree | 7d4aa9d0d5aff686b106cd5da72ba77960c4af43 /deps/node/benchmark/scatter.js | |
parent | 7dadf9356b4f3f4137ce982ea5bb960283116e9a (diff) | |
download | akono-71e285b94c7edaa43aa8115965cf5a36b8e0f80a.tar.gz akono-71e285b94c7edaa43aa8115965cf5a36b8e0f80a.tar.bz2 akono-71e285b94c7edaa43aa8115965cf5a36b8e0f80a.zip |
Node.js v11.13.0
Diffstat (limited to 'deps/node/benchmark/scatter.js')
-rw-r--r-- | deps/node/benchmark/scatter.js | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/deps/node/benchmark/scatter.js b/deps/node/benchmark/scatter.js new file mode 100644 index 00000000..10649e6b --- /dev/null +++ b/deps/node/benchmark/scatter.js @@ -0,0 +1,74 @@ +'use strict'; + +const fork = require('child_process').fork; +const path = require('path'); +const CLI = require('./_cli.js'); + +// +// Parse arguments +// +const cli = CLI(`usage: ./node scatter.js [options] [--] <filename> + Run the benchmark script <filename> many times and output the rate (ops/s) + together with the benchmark variables as a csv. + + --runs 30 number of samples + --set variable=value set benchmark variable (can be repeated) +`, { arrayArgs: ['set'] }); + +if (cli.items.length !== 1) { + cli.abort(cli.usage); +} + +// Create queue from the benchmarks list such both node versions are tested +// `runs` amount of times each. +const filepath = path.resolve(cli.items[0]); +const name = filepath.slice(__dirname.length + 1); +const runs = cli.optional.runs ? parseInt(cli.optional.runs, 10) : 30; + +let printHeader = true; + +function csvEncodeValue(value) { + if (typeof value === 'number') { + return value.toString(); + } else { + return `"${value.replace(/"/g, '""')}"`; + } +} + +(function recursive(i) { + const child = fork(path.resolve(__dirname, filepath), cli.optional.set); + + child.on('message', (data) => { + if (data.type !== 'report') { + return; + } + + // print csv header + if (printHeader) { + const confHeader = Object.keys(data.conf) + .map(csvEncodeValue) + .join(', '); + console.log(`"filename", ${confHeader}, "rate", "time"`); + printHeader = false; + } + + // print data row + const confData = Object.keys(data.conf) + .map((key) => csvEncodeValue(data.conf[key])) + .join(', '); + + console.log(`"${name}", ${confData}, ${data.rate}, ${data.time}`); + }); + + child.once('close', (code) => { + if (code) { + process.exit(code); + return; + } + + // If there are more benchmarks execute the next + if (i + 1 < runs) { + recursive(i + 1); + } + }); +})(0); |