iso-bench
Version:
Small benchmark library focused in avoiding optimization/deoptimization pollution between tests by isolating them.
43 lines (42 loc) • 1.23 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.getDiff = getDiff;
exports.getAsyncDiff = getAsyncDiff;
const perf_hooks_1 = require("perf_hooks");
function getDiff(cycles, callback, setup) {
const setupData = setup && setup();
const startTS = perf_hooks_1.performance.now();
while (cycles-- > 0) {
callback(setupData);
}
return perf_hooks_1.performance.now() - startTS;
}
function runAsync(cycles, callback, setup, resolve, reject) {
let sync = true;
while (cycles-- > 0 && sync) {
sync = false;
callback(() => {
if (sync) {
runAsync(cycles, callback, setup, resolve, reject);
}
else {
sync = true;
}
}, reject, setup);
}
if (sync) {
resolve();
}
else {
sync = true;
}
}
function getAsyncDiff(cycles, callback, setup) {
return new Promise((resolve, reject) => {
const setupData = setup && setup();
const startTS = perf_hooks_1.performance.now();
runAsync(cycles, callback, setupData, () => {
resolve(perf_hooks_1.performance.now() - startTS);
}, reject);
});
}