@botonic/plugin-contentful
Version:
## What Does This Plugin Do?
120 lines • 4.07 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.PerformanceMeasurer = void 0;
/* eslint-disable @typescript-eslint/restrict-plus-operands*/
class PerformanceMeasurer {
constructor(perf) {
this.perf = perf;
this.enabled = false;
this.allProfiled = {};
}
enable() {
this.enabled = true;
}
isEnabled() {
return this.enabled;
}
disable() {
this.enabled = false;
}
clear() {
this.allProfiled = {};
}
start(mark) {
if (this.enabled) {
this.perf.mark(`${mark}-start`);
}
}
end(mark, name) {
if (this.enabled) {
this.perf.mark(`${mark}-end`);
this.perf.measure(name, `${mark}-start`, `${mark}-end`);
}
}
/**
* get the amount of calls to a specific profiled entity
* @param name
*/
callCount(name) {
return this.getEntriesByName(name).length;
}
totalRunTime(name) {
return this.reduce(name, (a, b) => a + b);
}
maxRunTime(name) {
return this.reduce(name, Math.max);
}
reduce(name, fn) {
const raw = this.getEntriesByName(name)
.map(value => value.duration)
.reduce((a, b) => fn(a, b));
return Math.round(raw);
}
averageRunTime(name) {
return Math.round(this.totalRunTime(name) / this.callCount(name));
}
/**
* prints all available data about the profiled entity
* @param name
* @param namePadding
* @param callCountPadding
* @param totalRuntimePadding
* @param avgRunTimePadding
*/
stringSummary(name, namePadding = 20, callCountPadding = 6, totalRuntimePadding = PerformanceMeasurer.STATS_PAD, avgRunTimePadding = PerformanceMeasurer.STATS_PAD, maxRunTimePadding = PerformanceMeasurer.STATS_PAD) {
return (`|${padString(name, namePadding)}| calls=${padString(this.callCount(name) + '', callCountPadding)}|` +
` totalMs=${padString(this.totalRunTime(name) + '', totalRuntimePadding)}|` +
` maxMs=${padString(this.maxRunTime(name) + '', maxRunTimePadding)}|` +
` avgMs=${padString(this.averageRunTime(name) + '', avgRunTimePadding)}|`);
}
profiledKeys() {
return Object.keys(this.allProfiled);
}
/**
* prints all available data about all the profiled entities
*/
stringSummaryAll() {
if (this.profiledKeys().length == 0) {
return 'No calls or not Measurer not enabled';
}
const namePadding = Math.max.apply(null, this.profiledKeys().map(key => key.length));
return (
// `|${padString('Summary', namePadding)}| ${padString('', 16)}| ${padString(
// '',
// 43
// )}| ${padString('', 45)}|\n` +
this.profiledKeys()
.map(key => this.stringSummary(key, namePadding))
.sort()
.reduce((a, b) => `${a}\n${b}`) +
`\n|${padString('', namePadding)}| ` +
`calls=${padString(this.totalCalls() + '', 6)}| ` +
`totalMs=${padString(this.totalCallTime() + '', PerformanceMeasurer.STATS_PAD)}| ` +
`maxMs=${padString(this.totalMaxCallTime() + '', PerformanceMeasurer.STATS_PAD)}| ` +
`${padString('', 45)}|`);
}
totalCalls() {
return this.profiledKeys()
.map(key => this.callCount(key))
.reduce((a, b) => a + b);
}
totalCallTime() {
return this.profiledKeys()
.map(key => this.totalRunTime(key))
.reduce((a, b) => a + b);
}
totalMaxCallTime() {
return this.profiledKeys()
.map(key => this.maxRunTime(key))
.reduce((a, b) => a + b);
}
}
exports.PerformanceMeasurer = PerformanceMeasurer;
PerformanceMeasurer.STATS_PAD = 8;
function padString(str, length) {
if (str.length > length) {
return str;
}
return str + ' '.repeat(length - str.length);
}
//# sourceMappingURL=performance-measurer.js.map