From d7a4ccdf098f3a4f233d1c514fff0db3ddf0285a Mon Sep 17 00:00:00 2001 From: Gerhard Stoebich <18708370+Flarna@users.noreply.github.com> Date: Sat, 31 Oct 2020 01:07:39 +0100 Subject: [PATCH] test: correct test-worker-eventlooputil The active worker check compared the time from sending message till response arrived from worker with the complete time the worker was running till it responses to the spin request. If sending back the message is slow for some reason the test fails. Adapt the test to compare the time seen inside the worker with the time read from main thread. PR-URL: https://github.com/nodejs/node/pull/35891 Fixes: https://github.com/nodejs/node/issues/35844 Refs: https://github.com/nodejs/node/pull/35886 Refs: https://github.com/nodejs/node/pull/35664 Reviewed-By: Gireesh Punathil Reviewed-By: Rich Trott Backport-PR-URL: https://github.com/nodejs/node/pull/37165 --- test/parallel/test-bootstrap-modules.js | 1 + test/parallel/test-worker-eventlooputil.js | 18 ++++++++---------- 2 files changed, 9 insertions(+), 10 deletions(-) diff --git a/test/parallel/test-bootstrap-modules.js b/test/parallel/test-bootstrap-modules.js index e6bf26ee0ab016..e978edf04fc90c 100644 --- a/test/parallel/test-bootstrap-modules.js +++ b/test/parallel/test-bootstrap-modules.js @@ -93,6 +93,7 @@ if (!common.isMainThread) { expectedModules.add('Internal Binding messaging'); expectedModules.add('Internal Binding symbols'); expectedModules.add('Internal Binding worker'); + expectedModules.add('Internal Binding performance'); expectedModules.add('NativeModule _stream_duplex'); expectedModules.add('NativeModule _stream_passthrough'); expectedModules.add('NativeModule _stream_readable'); diff --git a/test/parallel/test-worker-eventlooputil.js b/test/parallel/test-worker-eventlooputil.js index 6759bd362cfd05..7e012cb2b02e7a 100644 --- a/test/parallel/test-worker-eventlooputil.js +++ b/test/parallel/test-worker-eventlooputil.js @@ -34,9 +34,10 @@ function workerOnMetricsMsg(msg) { } if (msg.cmd === 'spin') { + const elu = eventLoopUtilization(); const t = now(); while (now() - t < msg.dur); - return this.postMessage(eventLoopUtilization()); + return this.postMessage(eventLoopUtilization(elu)); } } @@ -50,12 +51,13 @@ let workerELU; if (eventLoopUtilization().idle <= 0) return setTimeout(mustCall(r), 5); + mainElu = eventLoopUtilization(); + worker = new Worker(__filename, { argv: [ 'iamalive' ] }); metricsCh = new MessageChannel(); worker.postMessage({ metricsCh: metricsCh.port1 }, [ metricsCh.port1 ]); workerELU = worker.performance.eventLoopUtilization; - mainElu = eventLoopUtilization(); metricsCh.port2.once('message', mustCall(checkWorkerIdle)); metricsCh.port2.postMessage({ cmd: 'elu' }); // Make sure it's still safe to call eventLoopUtilization() after the worker @@ -66,15 +68,10 @@ let workerELU; })); })(); - function checkWorkerIdle(wElu) { - const tmpMainElu = eventLoopUtilization(mainElu); const perfWorkerElu = workerELU(); - const eluDiff = eventLoopUtilization(perfWorkerElu, mainElu); + const tmpMainElu = eventLoopUtilization(mainElu); - assert.strictEqual(idleActive(eluDiff), - (perfWorkerElu.active - mainElu.active) + - (perfWorkerElu.idle - mainElu.idle)); assert.ok(idleActive(wElu) > 0, `${idleActive(wElu)} <= 0`); assert.ok(idleActive(workerELU(wElu)) > 0, `${idleActive(workerELU(wElu))} <= 0`); @@ -104,8 +101,9 @@ function checkWorkerActive() { const w2 = workerELU(w); assert.ok(w2.active >= 50, `${w2.active} < 50`); - assert.ok(idleActive(wElu) > idleActive(w2), - `${idleActive(wElu)} <= ${idleActive(w2)}`); + assert.ok(wElu.active >= 50, `${wElu.active} < 50`); + assert.ok(idleActive(wElu) < idleActive(w2), + `${idleActive(wElu)} >= ${idleActive(w2)}`); metricsCh.port2.postMessage({ cmd: 'close' }); });