UNPKG

@botonic/plugin-contentful

Version:

## What Does This Plugin Do?

120 lines 4.07 kB
"use strict"; 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