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.
@@ -37,14 +37,14 @@ function show() { - + - + - ` + ` } 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) {
- + \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
SensorsHardware - - + +
DetailsDetails (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}
Time PercentageSensorDevice
- - - - - - - - \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"} ]
Type