mirror of https://github.com/espruino/BangleApps
powermanager - Cleanup interface UI
parent
6104946a08
commit
48ac083189
|
@ -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;
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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"}
|
||||
]
|
||||
|
|
Loading…
Reference in New Issue