diff --git a/apps/powermanager/boot.js b/apps/powermanager/boot.js
index abc45c21b..c931a243b 100644
--- a/apps/powermanager/boot.js
+++ b/apps/powermanager/boot.js
@@ -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;
@@ -156,4 +161,4 @@
if (!charging) chargeStart = undefined;
});
}
-})();
+})();
\ No newline at end of file
diff --git a/apps/powermanager/interface.html b/apps/powermanager/interface.html
index 9434ac16f..7a00af993 100644
--- a/apps/powermanager/interface.html
+++ b/apps/powermanager/interface.html
@@ -21,7 +21,7 @@ function show() {
Util.showModal("Loading...");
domContent.innerHTML = "";
var htmlOverview = `
-
This needs "Log" to be enabled in power manager settings. The deferred function calls table is only updated on the bangle on reloads.
+
This needs "Logging" to be enabled in power manager settings. The deferred function calls table is only updated on the bangle on reloads.
Type
@@ -37,14 +37,14 @@ function show() {
-
Sensors
+
Hardware
-
-
+
+
-
Details
+
Details (Trace)
@@ -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 += `
${(c.time/1000).toFixed(2)}s
${(c.time/sum*100).toFixed(2)}%
-
${c.func}
`
+
${c.func}
`
}
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 = `
Sensor power
+ var htmlOverview = `
Hardware power
Recorded in a time span of ${Math.round(duration/1000)}s. Percentages are calculated from recording time.
@@ -201,7 +201,7 @@ function viewSensorsTable(filename) {
Time
Percentage
-
Sensor
+
Device
\n`;
@@ -213,7 +213,7 @@ function viewSensorsTable(filename) {
});
});
} else {
- var htmlOverview = `
Sensor power
+ var htmlOverview = `
Hardware power
No data available.
@@ -234,16 +234,11 @@ function viewDetailsTable(filename) {
Util.hideModal();
var htmlOverview = `
Detailed logging
+
+ 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.
+
-
-
-
Type
-
-
-
-
-
\n`;
let rows = data.trim().split("\n");
for (var row of rows) {
diff --git a/apps/powermanager/metadata.json b/apps/powermanager/metadata.json
index ff2ea9670..efb290892 100644
--- a/apps/powermanager/metadata.json
+++ b/apps/powermanager/metadata.json
@@ -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"}
]