summaryrefslogtreecommitdiff
path: root/deps/node/benchmark/scatter.js
diff options
context:
space:
mode:
authorFlorian Dold <florian.dold@gmail.com>2019-04-03 15:43:32 +0200
committerFlorian Dold <florian.dold@gmail.com>2019-04-03 15:45:57 +0200
commit71e285b94c7edaa43aa8115965cf5a36b8e0f80a (patch)
tree7d4aa9d0d5aff686b106cd5da72ba77960c4af43 /deps/node/benchmark/scatter.js
parent7dadf9356b4f3f4137ce982ea5bb960283116e9a (diff)
downloadakono-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.js74
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);