Skip to content

Commit

Permalink
test: correct test-worker-eventlooputil
Browse files Browse the repository at this point in the history
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: nodejs#35891
Fixes: nodejs#35844
Refs: nodejs#35886
Refs: nodejs#35664
Reviewed-By: Gireesh Punathil <[email protected]>
Reviewed-By: Rich Trott <[email protected]>
  • Loading branch information
Flarna authored and nodejs-github-bot committed Nov 4, 2020
1 parent 58280ff commit 9dbde1d
Showing 1 changed file with 8 additions and 10 deletions.
18 changes: 8 additions & 10 deletions test/parallel/test-worker-eventlooputil.js
Original file line number Diff line number Diff line change
Expand Up @@ -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));
}
}

Expand All @@ -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
Expand All @@ -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`);
Expand Down Expand Up @@ -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' });
});
Expand Down

0 comments on commit 9dbde1d

Please sign in to comment.