UNPKG

@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

80 lines 6.47 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.PowerMetricsData = void 0; const BaseMetricsData_1 = require("./BaseMetricsData"); const TimeHelper_1 = require("../../helper/TimeHelper"); class PowerMetricsData extends BaseMetricsData_1.BaseMetricsData { constructor(data) { super(); this._data = data; this._energyImpactPerTask = undefined; this.timeDelta = TimeHelper_1.TimeHelper.getTimeDelta(); } toJSON() { return { data: Object.assign(Object.assign({}, this._data), { timestamp: this._data.timestamp.toUTCString() }), timeDelta: this.timeDelta.toString() }; } static fromJSON(json, ...args) { let data; if (typeof json === 'string') { data = JSON.parse(json); } else { data = json; } const result = new PowerMetricsData(Object.assign(Object.assign({}, data.data), { timestamp: new Date(data.data.timestamp) })); result.timeDelta = BigInt(data.timeDelta); return result; } get duration() { return BigInt(this._data.elapsed_ns); } get startTime() { return TimeHelper_1.TimeHelper.timestampToHighResolutionTime(this._data.timestamp.getTime(), this.timeDelta); } get endTime() { return BigInt(this.startTime + this.duration); } energyImpactPerTask() { if (this._energyImpactPerTask === undefined) { const energyImpactPerTask = new Map; for (const task of this._data.tasks) { energyImpactPerTask.set(task.pid, task.energy_impact); } this._energyImpactPerTask = energyImpactPerTask; } return this._energyImpactPerTask; } totalEnergyImpact() { if (this._totalEnergyImpact === undefined) { let totalEnergyImpact = 0; for (const [_, energyImpact] of this.energyImpactPerTask().entries()) { totalEnergyImpact += energyImpact; } this._totalEnergyImpact = totalEnergyImpact; } return this._totalEnergyImpact; } processIsPresent(pid) { return this.energyImpactPerTask().has(pid); } energyPortionOfProcess(pid) { const energyImpactOfProcess = this.energyImpactPerTask().get(pid); if (energyImpactOfProcess === undefined) { throw new Error('Processes energy could not be found in the PowerMetrics measurements'); } return energyImpactOfProcess / this.totalEnergyImpact(); } cpuEnergy() { const power = this._data.processor.cpu_power; // in mW = 1e-3 W const time = this._data.elapsed_ns; // in ns = 1e-9 s return power * time / 1e9; // (1e-3 W)*(1e-9 s) = 1e-12 J = 1e-9 mJ } ramEnergy() { return 0; // sensor interface does not support ram energy measurements } } exports.PowerMetricsData = PowerMetricsData; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUG93ZXJNZXRyaWNzRGF0YS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9tb2RlbC9pbnRlcmZhY2VzL1Bvd2VyTWV0cmljc0RhdGEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsdURBQW1EO0FBRW5ELHdEQUFvRDtBQVdwRCxNQUFhLGdCQUFpQixTQUFRLGlDQUFlO0lBT3BELFlBQVksSUFBK0I7UUFDMUMsS0FBSyxFQUFFLENBQUE7UUFDUCxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQTtRQUNqQixJQUFJLENBQUMsb0JBQW9CLEdBQUcsU0FBUyxDQUFBO1FBQ3JDLElBQUksQ0FBQyxTQUFTLEdBQUcsdUJBQVUsQ0FBQyxZQUFZLEVBQUUsQ0FBQTtJQUMzQyxDQUFDO0lBRUQsTUFBTTtRQUNMLE9BQU87WUFDTixJQUFJLGtDQUNBLElBQUksQ0FBQyxLQUFLLEtBQ2IsU0FBUyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBRSxHQUM3QztZQUNELFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRTtTQUNwQyxDQUFBO0lBQ0YsQ0FBQztJQUVELE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBZ0MsRUFBRSxHQUFHLElBQVc7UUFDL0QsSUFBSSxJQUF1QixDQUFBO1FBQzNCLElBQUksT0FBTyxJQUFJLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDOUIsSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDeEIsQ0FBQzthQUFNLENBQUM7WUFDUCxJQUFJLEdBQUcsSUFBSSxDQUFBO1FBQ1osQ0FBQztRQUVELE1BQU0sTUFBTSxHQUFHLElBQUksZ0JBQWdCLGlDQUMvQixJQUFJLENBQUMsSUFBSSxLQUNaLFNBQVMsRUFBRSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUN2QyxDQUFBO1FB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