test: refactor tick objects prune function

PR-URL: https://github.com/nodejs/node/pull/26163
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de>
Reviewed-By: James M Snell <jasnell@gmail.com>
This commit is contained in:
Alexander Sattelmaier 2019-02-17 15:03:29 +01:00 committed by Anna Henningsen
parent 10de8d9ec8
commit e02453c3bd
No known key found for this signature in database
GPG Key ID: 9C63F3A6CD2AD8F9

View File

@ -17,29 +17,37 @@ function pruneTickObjects(activities) {
// Remove one TickObject on each pass until none is left anymore // Remove one TickObject on each pass until none is left anymore
// not super efficient, but simplest especially to handle // not super efficient, but simplest especially to handle
// multiple TickObjects in a row // multiple TickObjects in a row
let foundTickObject = true; const tickObject = {
found: true,
index: null,
data: null
};
while (foundTickObject) { while (tickObject.found) {
foundTickObject = false;
let tickObjectIdx = -1;
for (let i = 0; i < activities.length; i++) { for (let i = 0; i < activities.length; i++) {
if (activities[i].type !== 'TickObject') continue; if (activities[i].type === 'TickObject') {
tickObjectIdx = i; tickObject.index = i;
break; break;
} else if (i + 1 === activities.length) {
tickObject.found = false;
}
} }
if (tickObjectIdx >= 0) { if (tickObject.found) {
foundTickObject = true;
// Point all triggerAsyncIds that point to the tickObject // Point all triggerAsyncIds that point to the tickObject
// to its triggerAsyncId and finally remove it from the activities // to its triggerAsyncId and finally remove it from the activities
const tickObject = activities[tickObjectIdx]; tickObject.data = activities[tickObject.index];
const newTriggerId = tickObject.triggerAsyncId; const triggerId = {
const oldTriggerId = tickObject.uid; new: tickObject.data.triggerAsyncId,
old: tickObject.data.uid
};
activities.forEach(function repointTriggerId(x) { activities.forEach(function repointTriggerId(x) {
if (x.triggerAsyncId === oldTriggerId) x.triggerAsyncId = newTriggerId; if (x.triggerAsyncId === triggerId.old)
x.triggerAsyncId = triggerId.new;
}); });
activities.splice(tickObjectIdx, 1);
activities.splice(tickObject.index, 1);
} }
} }
return activities; return activities;