powermanager - Cleanup interface UI

pull/2560/head
Martin Boonk 2023-02-22 22:01:34 +01:00
parent 6104946a08
commit 48ac083189
3 changed files with 48 additions and 48 deletions

View File

@ -9,9 +9,9 @@
let def = require('Storage').readJSON("powermanager.def.json", true) || {};
if (!def.start) def.start = Date.now();
if (!def.deferred) def.deferred = {};
let sen = require('Storage').readJSON("powermanager.sen.json", true) || {};
if (!sen.start) sen.start = Date.now();
if (!sen.power) sen.power = {};
let hw = require('Storage').readJSON("powermanager.hw.json", true) || {};
if (!hw.start) hw.start = Date.now();
if (!hw.power) hw.power = {};
const saveEvery = 1000 * 60 * 5;
const TO_WRAP = ["GPS","Compass","Barometer","HRM","LCD"];
@ -22,10 +22,10 @@
def.saved = Date.now();
require('Storage').writeJSON("powermanager.def.json", def);
}
let senExists = require("Storage").read("powermanager.sen.json")!==undefined;
if (!(!senExists && sen.saved)){
sen.saved = Date.now();
require('Storage').writeJSON("powermanager.sen.json", sen);
let hwExists = require("Storage").read("powermanager.hw.json")!==undefined;
if (!(!hwExists && hw.saved)){
hw.saved = Date.now();
require('Storage').writeJSON("powermanager.hw.json", hw);
}
}
@ -34,7 +34,7 @@
E.on("kill", ()=>{
for (let c of TO_WRAP){
if (lastPowerOn[c] && Bangle["is"+c+"On"]()){
sen.power[c] += Date.now() - lastPowerOn[c];
hw.power[c] += Date.now() - lastPowerOn[c];
}
}
save();
@ -45,7 +45,7 @@
logFile.write("p," + type + ',' + (oldstate?1:0) + ',' + (state?1:0) + ',' + app + "\n");
};
let logDeferred = (type, duration, source) => {
logFile.write(type + ',' + duration + ',' + source + "\n");
logFile.write(type + ',' + duration + ',' + source.replace(/\n/g, " ").replace(/,/g,"") + "\n");
};
let lastPowerOn = {};
@ -66,7 +66,7 @@
lastPowerOn[type] = Date.now();
} else if (lastPowerOn[type] && !result){
//switched off
sen.power[type] += Date.now() - lastPowerOn[type];
hw.power[type] += Date.now() - lastPowerOn[type];
lastPowerOn[type] = undefined;
}
@ -76,23 +76,28 @@
}
let functions = {};
let wrapDeferred = ((o,t) => (a) => {
if (a == eval){
return o.apply(this, arguments);
} else {
let wrapped = ()=>{
let start = Date.now();
let result = a.apply(undefined, arguments.slice(1));
let end = Date.now()-start;
let f = a.toString().substring(0,100);
if (settings.logDetails) logDeferred(t, end, f);
if (!def.deferred[f]) def.deferred[f] = 0;
def.deferred[f] += end;
return result;
};
for (let p in a){
wrapped[p] = a[p];
let wrapped = a;
if (!a.__wrapped){
wrapped = ()=>{
let start = Date.now();
let result = a.apply(undefined, arguments.slice(1));
let end = Date.now()-start;
let f = a.toString().substring(0,100);
if (settings.logDetails) logDeferred(t, end, f);
if (!def.deferred[f]) def.deferred[f] = 0;
def.deferred[f] += end;
return result;
};
//copy over properties of functions
for (let p in a){
wrapped[p] = a[p];
}
//mark function as wrapped
wrapped.__wrapped = true;
}
let newArgs = arguments.slice();
newArgs[0] = wrapped;

View File

@ -21,7 +21,7 @@ function show() {
Util.showModal("Loading...");
domContent.innerHTML = "";
var htmlOverview = `<table class="table table-striped table-hover">
<div>This needs "Log" to be enabled in power manager settings. The deferred function calls table is only updated on the bangle on reloads.</div>
<div>This needs "Logging" to be enabled in power manager settings. The deferred function calls table is only updated on the bangle on reloads.</div>
<thead>
<tr>
<th>Type</th>
@ -37,14 +37,14 @@ function show() {
</td>
</tr>
<tr>
<td>Sensors</td>
<td>Hardware</td>
<td>
<button class="btn btn-primary" filename="powermanager.sen.json" task="sensorstable">Table</button>
<button class="btn btn-error" filename="powermanager.sen.json" task="clear" style="float: right;margin-right: 5px;">Clear</button>
<button class="btn btn-primary" filename="powermanager.hw.json" task="hardwaretable">Table</button>
<button class="btn btn-error" filename="powermanager.hw.json" task="clear" style="float: right;margin-right: 5px;">Clear</button>
</td>
</tr>
<tr>
<td>Details</td>
<td>Details (Trace)</td>
<td>
<button class="btn btn-primary" filename="powermanager.log" task="detailstable">Table</button>
<button class="btn btn-error" filename="powermanager.log" task="detailsclear" style="float: right;margin-right: 5px;">Clear</button>
@ -78,8 +78,8 @@ function show() {
if (task=="deftable") {
viewDeferredTable(filename);
}
if (task=="sensorstable") {
viewSensorsTable(filename);
if (task=="hardwaretable") {
viewHardwareTable(filename);
}
if (task=="detailstable") {
viewDetailsTable(filename);
@ -110,7 +110,7 @@ function viewDeferredTable(filename) {
tableRows += `<tr>
<td>${(c.time/1000).toFixed(2)}s</td>
<td>${(c.time/sum*100).toFixed(2)}%</td>
<td>${c.func}</td>`
<td><pre>${c.func}</pre></td>`
}
let duration = parsed.saved - parsed.start;
@ -165,15 +165,15 @@ function viewDeferredTable(filename) {
}
function viewSensorsTable(filename) {
Puck.eval(`require("Storage").list("powermanager.sen.json").length > 0`, (f)=>{
function viewHardwareTable(filename) {
Puck.eval(`require("Storage").list("powermanager.hw.json").length > 0`, (f)=>{
if (f) {
Util.showModal("Reading sensor info...");
Util.showModal("Reading hardware info...");
Util.readStorage(
filename, data => {
Util.hideModal();
let parsed = JSON.parse(data);
console.log("Sensors", parsed);
console.log("Hardware", parsed);
let duration = parsed.saved - parsed.start;
let rows = [];
@ -191,7 +191,7 @@ function viewSensorsTable(filename) {
}
var htmlOverview = `<h1>Sensor power</h1>
var htmlOverview = `<h1>Hardware power</h1>
<button class="btn btn-primary" id="back" style="float: right;margin-right: 5px;margin-left: 10px;">Back</button>
<div>
Recorded in a time span of <b>${Math.round(duration/1000)}s</b>. Percentages are calculated from recording time.
@ -201,7 +201,7 @@ function viewSensorsTable(filename) {
<tr>
<th>Time</th>
<th>Percentage</th>
<th>Sensor</th>
<th>Device</th>
</tr>
</thead>
<tbody>\n`;
@ -213,7 +213,7 @@ function viewSensorsTable(filename) {
});
});
} else {
var htmlOverview = `<h1>Sensor power</h1>
var htmlOverview = `<h1>Hardware power</h1>
<button class="btn btn-primary" id="back" style="float: right;margin-right: 5px;">Back</button>
<div>
No data available.
@ -234,16 +234,11 @@ function viewDetailsTable(filename) {
Util.hideModal();
var htmlOverview = `<h1>Detailed logging</h1>
This is a trace log of all logged power entries, first column denotes the type. p for power, i for interval and t for timeout. Power is logged with old state, new state and calling app if available. Functions are logged with execution duraion and source if available.
<button class="btn btn-primary" id="back" style="float: right;margin-right: 5px;">Back</button>
<table class="table table-striped table-hover">
<thead>
<tr>
<th>Type</th>
<th></th>
<th></th>
<th></th>
</tr>
</thead>
<tbody>\n`;
let rows = data.trim().split("\n");
for (var row of rows) {

View File

@ -18,7 +18,7 @@
{"name":"powermanager.default.json","url":"default.json"}
],
"data": [
{"name":"powermanager.sen.json"},
{"name":"powermanager.hw.json"},
{"name":"powermanager.def.json"},
{"name":"powermanager.log"}
]