summaryrefslogtreecommitdiff
path: root/benchmark
diff options
context:
space:
mode:
authorTrevor Norris <trev.norris@gmail.com>2020-10-14 13:57:43 -0600
committerGerhard Stoebich <18708370+Flarna@users.noreply.github.com>2020-10-27 09:43:20 +0100
commit04d16646a089ff15994e747d31dbc951dbc92e73 (patch)
treeb9c66f9db5311c9d6a7c988a43f08b6b016748d1 /benchmark
parent0d474327a230f4934baf12322a18a831686100ec (diff)
downloadios-node-v8-04d16646a089ff15994e747d31dbc951dbc92e73.tar.gz
ios-node-v8-04d16646a089ff15994e747d31dbc951dbc92e73.tar.bz2
ios-node-v8-04d16646a089ff15994e747d31dbc951dbc92e73.zip
worker: add eventLoopUtilization()
Allow calling eventLoopUtilization() directly on a worker thread: const worker = new Worker('./foo.js'); const elu = worker.performance.eventLoopUtilization(); setTimeout(() => { worker.performance.eventLoopUtilization(elu); }, 10); Add a new performance object on the Worker instance that will hopefully one day hold all the other performance metrics, such as nodeTiming. Include benchmarks and tests. PR-URL: https://github.com/nodejs/node/pull/35664 Reviewed-By: Juan José Arboleda <soyjuanarbol@gmail.com> Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: Gerhard Stöbich <deb2001-github@yahoo.de> Reviewed-By: James M Snell <jasnell@gmail.com>
Diffstat (limited to 'benchmark')
-rw-r--r--benchmark/worker/bench-eventlooputil.js61
1 files changed, 61 insertions, 0 deletions
diff --git a/benchmark/worker/bench-eventlooputil.js b/benchmark/worker/bench-eventlooputil.js
new file mode 100644
index 0000000000..2d59f9f19e
--- /dev/null
+++ b/benchmark/worker/bench-eventlooputil.js
@@ -0,0 +1,61 @@
+'use strict';
+
+const common = require('../common.js');
+const { Worker, parentPort } = require('worker_threads');
+
+if (process.argv[2] === 'idle cats') {
+ return parentPort.once('message', () => {});
+}
+
+const bench = common.createBenchmark(main, {
+ n: [1e6],
+ method: [
+ 'ELU_simple',
+ 'ELU_passed',
+ ],
+});
+
+function main({ method, n }) {
+ switch (method) {
+ case 'ELU_simple':
+ benchELUSimple(n);
+ break;
+ case 'ELU_passed':
+ benchELUPassed(n);
+ break;
+ default:
+ throw new Error(`Unsupported method ${method}`);
+ }
+}
+
+function benchELUSimple(n) {
+ const worker = new Worker(__filename, { argv: ['idle cats'] });
+
+ spinUntilIdle(worker, () => {
+ bench.start();
+ for (let i = 0; i < n; i++)
+ worker.performance.eventLoopUtilization();
+ bench.end(n);
+ worker.postMessage('bye');
+ });
+}
+
+function benchELUPassed(n) {
+ const worker = new Worker(__filename, { argv: ['idle cats'] });
+
+ spinUntilIdle(worker, () => {
+ let elu = worker.performance.eventLoopUtilization();
+ bench.start();
+ for (let i = 0; i < n; i++)
+ elu = worker.performance.eventLoopUtilization(elu);
+ bench.end(n);
+ worker.postMessage('bye');
+ });
+}
+
+function spinUntilIdle(w, cb) {
+ const t = w.performance.eventLoopUtilization();
+ if (t.idle + t.active > 0)
+ return process.nextTick(cb);
+ setTimeout(() => spinUntilIdle(w, cb), 1);
+}