@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
JavaScript
"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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