You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
62 lines
2.0 KiB
62 lines
2.0 KiB
"use strict"; |
|
Object.defineProperty(exports, "__esModule", { value: true }); |
|
const perf_hooks_1 = require("perf_hooks"); |
|
function createPerformance() { |
|
let enabled = false; |
|
let timeOrigin; |
|
let marks; |
|
let measurements; |
|
function enable() { |
|
enabled = true; |
|
marks = new Map(); |
|
measurements = new Map(); |
|
timeOrigin = perf_hooks_1.performance.now(); |
|
} |
|
function disable() { |
|
enabled = false; |
|
} |
|
function mark(name) { |
|
if (enabled) { |
|
marks.set(name, perf_hooks_1.performance.now()); |
|
} |
|
} |
|
function measure(name, startMark, endMark) { |
|
if (enabled) { |
|
const start = (startMark && marks.get(startMark)) || timeOrigin; |
|
const end = (endMark && marks.get(endMark)) || perf_hooks_1.performance.now(); |
|
measurements.set(name, (measurements.get(name) || 0) + (end - start)); |
|
} |
|
} |
|
function markStart(name) { |
|
if (enabled) { |
|
mark(`${name} start`); |
|
} |
|
} |
|
function markEnd(name) { |
|
if (enabled) { |
|
mark(`${name} end`); |
|
measure(name, `${name} start`, `${name} end`); |
|
} |
|
} |
|
function formatName(name, width = 0) { |
|
return `${name}:`.padEnd(width); |
|
} |
|
function formatDuration(duration, width = 0) { |
|
return `${(duration / 1000).toFixed(2)} s`.padStart(width); |
|
} |
|
function print() { |
|
if (enabled) { |
|
let nameWidth = 0; |
|
let durationWidth = 0; |
|
measurements.forEach((duration, name) => { |
|
nameWidth = Math.max(nameWidth, formatName(name).length); |
|
durationWidth = Math.max(durationWidth, formatDuration(duration).length); |
|
}); |
|
measurements.forEach((duration, name) => { |
|
console.log(`${formatName(name, nameWidth)} ${formatDuration(duration, durationWidth)}`); |
|
}); |
|
} |
|
} |
|
return { enable, disable, mark, markStart, markEnd, measure, print }; |
|
} |
|
exports.createPerformance = createPerformance;
|
|
|