Use the last draw time to set better timeouts

pull/1916/head
Martin Boonk 2022-03-03 18:42:48 +01:00
parent 20f4c10c9c
commit 1b733dd330
1 changed files with 21 additions and 10 deletions

View File

@ -603,6 +603,9 @@ var zeroOffset={X:0,Y:0};
var requestedDraws = 0; var requestedDraws = 0;
var isDrawing = false; var isDrawing = false;
var start;
function initialDraw(resources, face){ function initialDraw(resources, face){
//print("Free memory", process.memory(false).free); //print("Free memory", process.memory(false).free);
requestedDraws++; requestedDraws++;
@ -628,7 +631,8 @@ function initialDraw(resources, face){
draw(resources, face, [], zeroOffset); draw(resources, face, [], zeroOffset);
} }
endPerfLog("initialDraw"); endPerfLog("initialDraw");
//print(new Date().toISOString(), "Drawing done", (Date.now() - start).toFixed(0)); lastDrawTime = (Date.now() - start);
//print(new Date().toISOString(), "Drawing done", lastDrawTime.toFixed(0));
isDrawing = false; isDrawing = false;
if (requestedDraws > 0){ if (requestedDraws > 0){
//print(new Date().toISOString(), "Had deferred drawing left, drawing again"); //print(new Date().toISOString(), "Had deferred drawing left, drawing again");
@ -676,18 +680,21 @@ function getMatchedWaitingTime(time){
function setMatchedInterval(callable, time, intervalHandler){ function setMatchedInterval(callable, time, intervalHandler, delay){
//print("Setting matched interval for", time); //print("Setting matched interval for", time);
var matchedTime = getMatchedWaitingTime(time + delay);
setTimeout(()=>{ setTimeout(()=>{
var interval = setInterval(callable, time); var interval = setInterval(callable, time);
if (intervalHandler) intervalHandler(interval); if (intervalHandler) intervalHandler(interval);
callable(); callable();
}, getMatchedWaitingTime(time)); }, matchedTime);
} }
var unlockedDrawInterval; var unlockedDrawInterval;
var lockedDrawInterval; var lockedDrawInterval;
var lastDrawTime = 0;
var lockedRedraw = getByPath(watchface, ["Properties","Redraw","Locked"]) || 60000; var lockedRedraw = getByPath(watchface, ["Properties","Redraw","Locked"]) || 60000;
var unlockedRedraw = getByPath(watchface, ["Properties","Redraw","Unlocked"]) || 1000; var unlockedRedraw = getByPath(watchface, ["Properties","Redraw","Unlocked"]) || 1000;
var defaultRedraw = getByPath(watchface, ["Properties","Redraw","Default"]) || "Always"; var defaultRedraw = getByPath(watchface, ["Properties","Redraw","Default"]) || "Always";
@ -701,28 +708,32 @@ var stepsgoal = 2000;
function handleLock(isLocked, forceRedraw){ function handleLock(isLocked, forceRedraw){
//print("isLocked", Bangle.isLocked()); //print("isLocked", Bangle.isLocked());
if (forceRedraw || !redrawEvents || redrawEvents.includes("lock")){
//print("Redrawing on lock", isLocked);
initialDraw(watchfaceResources, watchface);
}
if (lockedDrawInterval) clearInterval(lockedDrawInterval); if (lockedDrawInterval) clearInterval(lockedDrawInterval);
if (unlockedDrawInterval) clearInterval(unlockedDrawInterval); if (unlockedDrawInterval) clearInterval(unlockedDrawInterval);
if (!isLocked){ if (!isLocked){
if (forceRedraw || !redrawEvents || (redrawEvents.includes("unlock"))){
//print("Redrawing on unlock", isLocked);
initialDraw(watchfaceResources, watchface);
}
setMatchedInterval(()=>{ setMatchedInterval(()=>{
//print("Redrawing on unlocked interval"); //print("Redrawing on unlocked interval");
initialDraw(watchfaceResources, watchface); initialDraw(watchfaceResources, watchface);
},unlockedRedraw, (v)=>{ },unlockedRedraw, (v)=>{
unlockedDrawInterval = v; unlockedDrawInterval = v;
}); }, lastDrawTime);
Bangle.setHRMPower(1, "imageclock"); Bangle.setHRMPower(1, "imageclock");
Bangle.setBarometerPower(1, 'imageclock'); Bangle.setBarometerPower(1, 'imageclock');
} else { } else {
if (forceRedraw || !redrawEvents || (redrawEvents.includes("lock"))){
//print("Redrawing on lock", isLocked);
initialDraw(watchfaceResources, watchface);
}
setMatchedInterval(()=>{ setMatchedInterval(()=>{
//print("Redrawing on locked interval"); //print("Redrawing on locked interval");
initialDraw(watchfaceResources, watchface); initialDraw(watchfaceResources, watchface);
},lockedRedraw, (v)=>{ },lockedRedraw, (v)=>{
lockedDrawInterval = v; lockedDrawInterval = v;
}); }, lastDrawTime);
Bangle.setHRMPower(0, "imageclock"); Bangle.setHRMPower(0, "imageclock");
Bangle.setBarometerPower(0, 'imageclock'); Bangle.setBarometerPower(0, 'imageclock');
} }
@ -759,4 +770,4 @@ setTimeout(()=>{
clearWidgetsDraw(); clearWidgetsDraw();
}, 100); }, 100);
handleLock(Bangle.isLocked(), true); handleLock(Bangle.isLocked());