blob: c4df23044165802783bafd41fdf74edc5a8b66c7 [file] [log] [blame]
const WorkerStructuredCloneDifferentPayloadsPerfTestRunner = (function() {
function pingPong(data) {
return new Promise((resolve, reject) => {
let mainThreadBeginSerialize, mainThreadEndDeserialize, iteration, numMessages;
iteration = 0;
numMessages = data['toWorker'].length;
worker.addEventListener('message', function listener(e) {
try {
e.data.sendData; // Force deserialization.
// keep sending messages to worker until worker runs out of responses.
if (!e.data.done && iteration < numMessages) {
iteration++;
worker.postMessage({'data' : data['toWorker'][iteration], 'iteration' : iteration});
} else {
mainThreadEndDeserialize = performance.now();
worker.removeEventListener('message', listener);
totalTime = mainThreadEndDeserialize - mainThreadBeginSerialize;
resolve([totalTime]);
}
} catch (err) { reject(err); }
});
mainThreadBeginSerialize = performance.now();
worker.postMessage({'data' : data['toWorker'][iteration], 'iteration' : iteration});
});
}
return {
measureTimeAsync(test) {
let isDone = false;
worker = new Worker('resources/worker-structured-clone-different-payloads.js');
PerfTestRunner.startMeasureValuesAsync({
description: test.description,
unit: 'ms',
warmUpCount: test.warmUpCount || 5,
iterationCount: test.iterationCount || 15,
done() { isDone = true; },
run: pingPongUntilDone,
});
function pingPongUntilDone() {
pingPong(test.data).then(([totalTime]) => {
console.log([totalTime]);
if (test.measure == 'roundtrip')
PerfTestRunner.measureValueAsync(totalTime);
if (!isDone) pingPongUntilDone();
});
}
},
};
})();