@oaklean/profiler-core
Version:
Part of the @oaklean suite. It provides all basic functions to work with the `.oak` file format. It allows parsing the `.oak` file format as well as tools for analyzing the measurement values. It also provides all necessary capabilities required for prec
104 lines • 8.35 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.PerformanceHelper = void 0;
const fs_1 = __importDefault(require("fs"));
const TimeHelper_1 = require("./TimeHelper");
const PermissionHelper_1 = require("./PermissionHelper");
const LoggerHelper_1 = require("./LoggerHelper");
const env_1 = require("../constants/env");
class PerformanceHelper {
constructor() {
this._measures = new Map();
this._firstMeasure = BigInt(0);
this._lastMeasure = BigInt(0);
}
static loadFromFile(path) {
if (fs_1.default.existsSync(path.toPlatformString())) {
const jsonString = fs_1.default
.readFileSync(path.toPlatformString(), 'utf8')
.toString();
return JSON.parse(jsonString);
}
return { measures: {} };
}
static storeToFile(path, data) {
PermissionHelper_1.PermissionHelper.writeFileWithUserPermission(path, JSON.stringify(data, null, 2));
}
exportAndSum(path) {
if (!env_1.OAKLEAN_ENABLE_PERFORMANCE_TRACKING) {
return;
}
const report = PerformanceHelper.loadFromFile(path);
for (const [name, measure] of this._measures) {
if (measure.end) {
const diff = Number(measure.end - measure.start);
report.measures[name] = (report.measures[name] || 0) + diff;
}
}
PerformanceHelper.storeToFile(path, report);
}
start(name) {
if (!env_1.OAKLEAN_ENABLE_PERFORMANCE_TRACKING) {
return;
}
const time = TimeHelper_1.TimeHelper.getCurrentHighResolutionTime();
if (!this._firstMeasure) {
this._firstMeasure = time;
}
this._measures.set(name, {
start: time,
end: null
});
}
stop(name) {
if (!env_1.OAKLEAN_ENABLE_PERFORMANCE_TRACKING) {
return;
}
const time = TimeHelper_1.TimeHelper.getCurrentHighResolutionTime();
this._lastMeasure = time;
const measure = this._measures.get(name);
if (measure) {
measure.end = time;
}
}
static printAccumulatedReport(path) {
const loadedReport = PerformanceHelper.loadFromFile(path);
LoggerHelper_1.LoggerHelper.log('Accumulated performance report:');
const report = {};
for (const name of Object.keys(loadedReport.measures)) {
report[name] = {
Duration: `${(loadedReport.measures[name] / 1e9).toFixed(3)} s`
};
}
LoggerHelper_1.LoggerHelper.table(report, ['Duration']);
}
printReport(title) {
if (!env_1.OAKLEAN_ENABLE_PERFORMANCE_TRACKING) {
return;
}
const report = {};
const total = Number(this._lastMeasure - this._firstMeasure);
for (const [name, measure] of this._measures) {
if (measure.end) {
const diff = Number(measure.end - measure.start);
report[name] = {
Duration: `${(diff / 1e9).toFixed(3)} s`,
Percentage: `${((diff / total) * 100).toFixed(2)} %`
};
}
else {
report[name] = {
Duration: 'N/A',
Percentage: 'N/A'
};
}
}
LoggerHelper_1.LoggerHelper.log(`Performance report (${title}):`, (total / 1e9).toFixed(3), 's');
LoggerHelper_1.LoggerHelper.table(report, ['Duration', 'Percentage']);
}
}
exports.PerformanceHelper = PerformanceHelper;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGVyZm9ybWFuY2VIZWxwZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvaGVscGVyL1BlcmZvcm1hbmNlSGVscGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLDRDQUFtQjtBQUVuQiw2Q0FBeUM7QUFDekMseURBQXFEO0FBQ3JELGlEQUE2QztBQVM3QywwQ0FBc0U7QUFFdEUsTUFBYSxpQkFBaUI7SUFLN0I7UUFDQyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksR0FBRyxFQUFnQyxDQUFBO1FBQ3hELElBQUksQ0FBQyxhQUFhLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBdUIsQ0FBQTtRQUNwRCxJQUFJLENBQUMsWUFBWSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQXVCLENBQUE7SUFDcEQsQ0FBQztJQUVELE1BQU0sQ0FBQyxZQUFZLENBQUMsSUFBaUI7UUFDcEMsSUFBSSxZQUFFLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUM1QyxNQUFNLFVBQVUsR0FBRyxZQUFFO2lCQUNuQixZQUFZLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLEVBQUUsTUFBTSxDQUFDO2lCQUM3QyxRQUFRLEVBQUUsQ0FBQTtZQUNaLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQXVCLENBQUE7UUFDcEQsQ0FBQztRQUNELE9BQU8sRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLENBQUE7SUFDeEIsQ0FBQztJQUVELE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBaUIsRUFBRSxJQUF3QjtRQUM3RCxtQ0FBZ0IsQ0FBQywyQkFBMkIsQ0FDM0MsSUFBSSxFQUNKLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FDN0IsQ0FBQTtJQUNGLENBQUM7SUFFRCxZQUFZLENBQUMsSUFBaUI7UUFDN0IsSUFBSSxDQUFDLHlDQUFtQyxF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