mirror of
https://github.com/nodejs/node.git
synced 2025-05-05 19:08:17 +00:00
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 <gpunathi@in.ibm.com> Reviewed-By: Rich Trott <rtrott@gmail.com>
This commit is contained in:
parent
58280ff24f
commit
9dbde1d4fc
@ -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' });
|
||||
});
|
||||
|
Loading…
Reference in New Issue
Block a user