summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--benchmark/fixtures/echo.worker.js7
-rw-r--r--benchmark/worker/echo.js73
2 files changed, 80 insertions, 0 deletions
diff --git a/benchmark/fixtures/echo.worker.js b/benchmark/fixtures/echo.worker.js
new file mode 100644
index 0000000000..fac5551a66
--- /dev/null
+++ b/benchmark/fixtures/echo.worker.js
@@ -0,0 +1,7 @@
+'use strict';
+
+const { parentPort } = require('worker');
+
+parentPort.on('message', (msg) => {
+ parentPort.postMessage(msg);
+});
diff --git a/benchmark/worker/echo.js b/benchmark/worker/echo.js
new file mode 100644
index 0000000000..6ab471a0a8
--- /dev/null
+++ b/benchmark/worker/echo.js
@@ -0,0 +1,73 @@
+'use strict';
+
+const common = require('../common.js');
+const path = require('path');
+const bench = common.createBenchmark(main, {
+ workers: [1],
+ payload: ['string', 'object'],
+ sendsPerBroadcast: [1, 10],
+ n: [1e5]
+}, { flags: ['--experimental-worker'] });
+
+const workerPath = path.resolve(__dirname, '..', 'fixtures', 'echo.worker.js');
+
+function main(conf) {
+ const { Worker } = require('worker');
+
+ const n = +conf.n;
+ const workers = +conf.workers;
+ const sends = +conf.sendsPerBroadcast;
+ const expectedPerBroadcast = sends * workers;
+ var payload;
+ var readies = 0;
+ var broadcasts = 0;
+ var msgCount = 0;
+
+ switch (conf.payload) {
+ case 'string':
+ payload = 'hello world!';
+ break;
+ case 'object':
+ payload = { action: 'pewpewpew', powerLevel: 9001 };
+ break;
+ default:
+ throw new Error('Unsupported payload type');
+ }
+
+ const workerObjs = [];
+
+ for (var i = 0; i < workers; ++i) {
+ const worker = new Worker(workerPath);
+ workerObjs.push(worker);
+ worker.on('online', onOnline);
+ worker.on('message', onMessage);
+ }
+
+ function onOnline() {
+ if (++readies === workers) {
+ bench.start();
+ broadcast();
+ }
+ }
+
+ function broadcast() {
+ if (broadcasts++ === n) {
+ bench.end(n);
+ for (const worker of workerObjs) {
+ worker.unref();
+ }
+ return;
+ }
+ for (const worker of workerObjs) {
+ for (var i = 0; i < sends; ++i)
+ worker.postMessage(payload);
+ }
+ }
+
+ function onMessage() {
+ if (++msgCount === expectedPerBroadcast) {
+ msgCount = 0;
+ broadcast();
+ }
+ }
+}