From c32f234e9543771070b1618f429963419823cfc7 Mon Sep 17 00:00:00 2001 From: Martin Boonk Date: Fri, 5 May 2023 20:55:29 +0200 Subject: [PATCH 1/5] powermanager - Use charging state on boot --- apps/powermanager/boot.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/apps/powermanager/boot.js b/apps/powermanager/boot.js index f3e3f718f..0f26e18ab 100644 --- a/apps/powermanager/boot.js +++ b/apps/powermanager/boot.js @@ -152,11 +152,12 @@ return v; }; } - + if (settings.autoCalibration){ let chargeStart; + if (Bangle.isCharging()) chargeStart = Date.now(); Bangle.on("charging", (charging)=>{ - if (charging) chargeStart = Date.now(); + if (!chargeStart && charging) chargeStart = Date.now(); if (chargeStart && !charging && (Date.now() - chargeStart > 1000*60*60*3)) require("powermanager").setCalibration(); if (!charging) chargeStart = undefined; }); From 9d7bb2d9c8a5e80e9c27a73eab43e6cf6b6bd856 Mon Sep 17 00:00:00 2001 From: Martin Boonk Date: Fri, 12 May 2023 00:00:36 +0200 Subject: [PATCH 2/5] powermanager - Log timestamps while tracing and tweak table visuals --- apps/powermanager/boot.js | 6 +-- apps/powermanager/interface.html | 82 ++++++++++++++++++++++---------- 2 files changed, 61 insertions(+), 27 deletions(-) diff --git a/apps/powermanager/boot.js b/apps/powermanager/boot.js index 0f26e18ab..c35ec1546 100644 --- a/apps/powermanager/boot.js +++ b/apps/powermanager/boot.js @@ -42,10 +42,10 @@ let logPower = (type, oldstate, state, app) => { - logFile.write("p," + type + ',' + (oldstate?1:0) + ',' + (state?1:0) + ',' + app + "\n"); + logFile.write(Date.now() + ",p," + type + ',' + (oldstate?1:0) + ',' + (state?1:0) + ',' + app + "\n"); }; let logDeferred = (type, duration, source) => { - logFile.write(type + ',' + duration + ',' + source.replace(/\n/g, " ").replace(/,/g,"") + "\n"); + logFile.write(Date.now() + "," + type + ',' + duration + ',' + source.replace(/\n/g, " ").replace(/,/g,"") + "\n"); }; let lastPowerOn = {}; @@ -162,4 +162,4 @@ if (!charging) chargeStart = undefined; }); } -})(); \ No newline at end of file +})(); diff --git a/apps/powermanager/interface.html b/apps/powermanager/interface.html index fac49694c..95fd3347b 100644 --- a/apps/powermanager/interface.html +++ b/apps/powermanager/interface.html @@ -1,6 +1,15 @@ + +
@@ -119,18 +128,21 @@ function viewDeferredTable(filename) {
This are functions used in timeouts and intervals and their accumulated execution times. Recorded in a time span of ${timeFormat(duration)}. Timeouts/intervals have run for ${timeFormat(sum)} (${(sum/duration*100).toFixed(2)}%). Percentages are calculated from summarized timeout/interval running time. -
- - - - - - - - - \n`; + + +
+ +
TimePercentageFunction
+ + + + + + + + \n`; htmlOverview += tableRows; - htmlOverview += `
TimePercentageFunction
`; + htmlOverview += ``; domContent.innerHTML = htmlOverview; domContent.querySelector("#back").addEventListener("click",event => { show(); @@ -234,24 +246,46 @@ 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. - - - \n`; +
+ This is a trace log of all logged entries. Power is logged with type, state transition (old → new) and calling app if available. Functions are logged with execution duraion and source if available. +
+
+ +
+ + + + + + + + \n`; let rows = data.trim().split("\n"); + let firstTimestamp; for (var row of rows) { let cols = row.split(","); - htmlOverview += ` - - - - - - ` + let col = 0; + if (!firstTimestamp) firstTimestamp = cols[0]; + + if (cols[1] == "p"){ + cols[1] = "Power"; + htmlOverview += ` + + + + ` + } else { + htmlOverview += ` + + + + ` + } } - htmlOverview += `
TimeTypeInfo
${cols[0]}${cols[1]}${cols[2]}${cols[3]}${cols[4]}
${timeFormat(cols[col++]-firstTimestamp)}${cols[col++]}${cols[col++]}
${cols[col++]} → ${cols[col++]}
${cols[col++]}
${timeFormat(cols[col++]-firstTimestamp)}${cols[col++]=="t"?"Timeout":"Interval"}${new Number(cols[col++]).toFixed(0)}ms
${cols[col++]}
`; + htmlOverview += ``; + + domContent.innerHTML = htmlOverview; domContent.querySelector("#back").addEventListener("click",event => { show(); From fd1c9058aa36ad2d4f87453b296cbe0a0487fede Mon Sep 17 00:00:00 2001 From: Martin Boonk Date: Fri, 12 May 2023 00:27:22 +0200 Subject: [PATCH 3/5] powermanager - Allow clearing log files from settings --- apps/powermanager/settings.js | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/apps/powermanager/settings.js b/apps/powermanager/settings.js index fa186bfac..d2b2097f8 100644 --- a/apps/powermanager/settings.js +++ b/apps/powermanager/settings.js @@ -140,6 +140,19 @@ onchange: v => { writeSettings("logDetails", v); } + }, + 'Clear logs': function (){ + E.showPrompt("Delete logs and reload?").then((v)=>{ + if (v) { + require('Storage').open("powermanager.log","w").erase(); + require("Storage").erase("powermanager.def.json"); + require("Storage").erase("powermanager.hw.json"); + load(); + } else + E.showMenu(submenu_logging); + }).catch(()=>{ + E.showMenu(submenu_logging); + }); } } From b5ffb4e67585ffc6577b44fad43a5d454e54e869 Mon Sep 17 00:00:00 2001 From: Martin Boonk Date: Fri, 12 May 2023 00:32:47 +0200 Subject: [PATCH 4/5] powermanager - Fix typo --- apps/powermanager/interface.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/powermanager/interface.html b/apps/powermanager/interface.html index 95fd3347b..2cab4561a 100644 --- a/apps/powermanager/interface.html +++ b/apps/powermanager/interface.html @@ -248,7 +248,7 @@ function viewDetailsTable(filename) { var htmlOverview = `

Detailed logging

- This is a trace log of all logged entries. Power is logged with type, state transition (old → new) and calling app if available. Functions are logged with execution duraion and source if available. + This is a trace log of all logged entries. Power is logged with type, state transition (old → new) and calling app if available. Functions are logged with execution duration and source if available.
From cd6ecdab6159eabfa135344f76fa6735c53d1be6 Mon Sep 17 00:00:00 2001 From: Martin Boonk Date: Fri, 12 May 2023 00:34:38 +0200 Subject: [PATCH 5/5] powermanager - Bump version --- apps/powermanager/ChangeLog | 4 +++- apps/powermanager/metadata.json | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/apps/powermanager/ChangeLog b/apps/powermanager/ChangeLog index de3fd021c..87bbc80c7 100644 --- a/apps/powermanager/ChangeLog +++ b/apps/powermanager/ChangeLog @@ -9,4 +9,6 @@ 0.07: Convert Yes/No On/Off in settings to checkboxes 0.08: Fix the wrapping of intervals/timeouts with parameters Fix the widget drawing if widgets are hidden and Bangle.setLCDBrightness is called -0.09: Accidental version bump \ No newline at end of file +0.09: Accidental version bump +0.10: Use charging state on boot for auto calibration + Log additional timestamp for trace log diff --git a/apps/powermanager/metadata.json b/apps/powermanager/metadata.json index 92c471fd6..55c7a662e 100644 --- a/apps/powermanager/metadata.json +++ b/apps/powermanager/metadata.json @@ -2,7 +2,7 @@ "id": "powermanager", "name": "Power Manager", "shortName": "Power Manager", - "version": "0.09", + "version": "0.10", "description": "Allow configuration of warnings and thresholds for battery charging and display.", "icon": "app.png", "type": "bootloader",