esmodule-builder
Version:
ECMAScript-Module (ES Module) builder.
213 lines (185 loc) • 5.3 kB
JavaScript
function noop() {}
if (typeof console === "undefined") {
console = {};
}
if (!console.time) {
console.time = console.timeEnd = noop;
}
if (!console.profile) {
console.profile = console.profileEnd = noop;
}
// Ensure that benchmarks don't get optimized away by calling this blackbox
// function in your benchmark's action.
var __benchmarkResults = [];
var benchmarkBlackbox = [].push.bind(__benchmarkResults);
const now =
typeof window === "object" && window.performance && window.performance.now
? () => window.performance.now()
: () => now();
const yieldForTick =
typeof setTimeout === "function" ? () => new Promise(resolve => setTimeout(resolve, 1)) : () => Promise.resolve();
// Benchmark running an action n times.
async function benchmark(setup, action, tearDown = () => {}) {
__benchmarkResults = [];
console.time("setup");
await setup();
console.timeEnd("setup");
// Warm up the JIT.
console.time("warmup");
for (let i = 0; i < WARM_UP_ITERATIONS; i++) {
await action();
await yieldForTick();
}
console.timeEnd("warmup");
const stats = new Stats("ms");
for (let i = 0; i < BENCH_ITERATIONS; i++) {
console.time("iteration");
const thisIterationStart = now();
await action();
stats.take(now() - thisIterationStart);
console.timeEnd("iteration");
await yieldForTick();
}
await tearDown();
return stats;
}
async function getTestMapping() {
let smc = await new sourceMap.SourceMapConsumer(testSourceMap);
let mappings = [];
smc.eachMapping([].push, mappings, sourceMap.SourceMapConsumer.ORIGINAL_ORDER);
let testMapping = mappings[Math.floor(mappings.length / 13)];
smc.destroy();
return testMapping;
}
var benchmarks = {
"SourceMapGenerator#toString": () => {
let smg;
return benchmark(
async function() {
var smc = await new sourceMap.SourceMapConsumer(testSourceMap);
smg = sourceMap.SourceMapGenerator.fromSourceMap(smc);
smc.destroy();
},
() => {
benchmarkBlackbox(smg.toString().length);
}
);
},
"set.first.breakpoint": () => {
let testMapping;
return benchmark(
async function() {
testMapping = await getTestMapping();
},
async function() {
let smc = await new sourceMap.SourceMapConsumer(testSourceMap);
benchmarkBlackbox(
smc.allGeneratedPositionsFor({
source: testMapping.source,
line: testMapping.originalLine
}).length
);
smc.destroy();
}
);
},
"first.pause.at.exception": () => {
let testMapping;
return benchmark(
async function() {
testMapping = await getTestMapping();
},
async function() {
let smc = await new sourceMap.SourceMapConsumer(testSourceMap);
benchmarkBlackbox(
smc.originalPositionFor({
line: testMapping.generatedLine,
column: testMapping.generatedColumn
})
);
smc.destroy();
}
);
},
"subsequent.setting.breakpoints": () => {
let testMapping;
let smc;
return benchmark(
async function() {
testMapping = await getTestMapping();
smc = await new sourceMap.SourceMapConsumer(testSourceMap);
},
async function() {
benchmarkBlackbox(
smc.allGeneratedPositionsFor({
source: testMapping.source,
line: testMapping.originalLine
})
);
},
function() {
smc.destroy();
}
);
},
"subsequent.pausing.at.exceptions": () => {
let testMapping;
let smc;
return benchmark(
async function() {
testMapping = await getTestMapping();
smc = await new sourceMap.SourceMapConsumer(testSourceMap);
},
async function() {
benchmarkBlackbox(
smc.originalPositionFor({
line: testMapping.generatedLine,
column: testMapping.generatedColumn
})
);
},
function() {
smc.destroy();
}
);
},
"parse.and.iterate": () => {
return benchmark(noop, async function() {
const smc = await new sourceMap.SourceMapConsumer(testSourceMap);
let maxLine = 0;
let maxCol = 0;
smc.eachMapping(m => {
maxLine = Math.max(maxLine, m.generatedLine);
maxLine = Math.max(maxLine, m.originalLine);
maxCol = Math.max(maxCol, m.generatedColumn);
maxCol = Math.max(maxCol, m.originalColumn);
});
benchmarkBlackbox(maxLine);
benchmarkBlackbox(maxCol);
smc.destroy();
});
},
"iterate.already.parsed": () => {
let smc;
return benchmark(
async function() {
smc = await new sourceMap.SourceMapConsumer(testSourceMap);
},
async function() {
let maxLine = 0;
let maxCol = 0;
smc.eachMapping(m => {
maxLine = Math.max(maxLine, m.generatedLine);
maxLine = Math.max(maxLine, m.originalLine);
maxCol = Math.max(maxCol, m.generatedColumn);
maxCol = Math.max(maxCol, m.originalColumn);
});
benchmarkBlackbox(maxLine);
benchmarkBlackbox(maxCol);
},
function() {
smc.destroy();
}
);
}
};