From 1b733dd330b5ec1bf184a257b9d27e6da0829629 Mon Sep 17 00:00:00 2001 From: Martin Boonk Date: Thu, 3 Mar 2022 18:42:48 +0100 Subject: [PATCH] Use the last draw time to set better timeouts --- apps/imageclock/app.js | 31 +++++++++++++++++++++---------- 1 file changed, 21 insertions(+), 10 deletions(-) diff --git a/apps/imageclock/app.js b/apps/imageclock/app.js index 0ab039e15..3d8bfceb0 100644 --- a/apps/imageclock/app.js +++ b/apps/imageclock/app.js @@ -603,6 +603,9 @@ var zeroOffset={X:0,Y:0}; var requestedDraws = 0; var isDrawing = false; + +var start; + function initialDraw(resources, face){ //print("Free memory", process.memory(false).free); requestedDraws++; @@ -628,7 +631,8 @@ function initialDraw(resources, face){ draw(resources, face, [], zeroOffset); } 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; if (requestedDraws > 0){ //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); + var matchedTime = getMatchedWaitingTime(time + delay); setTimeout(()=>{ var interval = setInterval(callable, time); if (intervalHandler) intervalHandler(interval); callable(); - }, getMatchedWaitingTime(time)); + }, matchedTime); } var unlockedDrawInterval; var lockedDrawInterval; +var lastDrawTime = 0; + var lockedRedraw = getByPath(watchface, ["Properties","Redraw","Locked"]) || 60000; var unlockedRedraw = getByPath(watchface, ["Properties","Redraw","Unlocked"]) || 1000; var defaultRedraw = getByPath(watchface, ["Properties","Redraw","Default"]) || "Always"; @@ -701,28 +708,32 @@ var stepsgoal = 2000; function handleLock(isLocked, forceRedraw){ //print("isLocked", Bangle.isLocked()); - if (forceRedraw || !redrawEvents || redrawEvents.includes("lock")){ - //print("Redrawing on lock", isLocked); - initialDraw(watchfaceResources, watchface); - } if (lockedDrawInterval) clearInterval(lockedDrawInterval); if (unlockedDrawInterval) clearInterval(unlockedDrawInterval); if (!isLocked){ + if (forceRedraw || !redrawEvents || (redrawEvents.includes("unlock"))){ + //print("Redrawing on unlock", isLocked); + initialDraw(watchfaceResources, watchface); + } setMatchedInterval(()=>{ //print("Redrawing on unlocked interval"); initialDraw(watchfaceResources, watchface); },unlockedRedraw, (v)=>{ unlockedDrawInterval = v; - }); + }, lastDrawTime); Bangle.setHRMPower(1, "imageclock"); Bangle.setBarometerPower(1, 'imageclock'); } else { + if (forceRedraw || !redrawEvents || (redrawEvents.includes("lock"))){ + //print("Redrawing on lock", isLocked); + initialDraw(watchfaceResources, watchface); + } setMatchedInterval(()=>{ //print("Redrawing on locked interval"); initialDraw(watchfaceResources, watchface); },lockedRedraw, (v)=>{ lockedDrawInterval = v; - }); + }, lastDrawTime); Bangle.setHRMPower(0, "imageclock"); Bangle.setBarometerPower(0, 'imageclock'); } @@ -759,4 +770,4 @@ setTimeout(()=>{ clearWidgetsDraw(); }, 100); -handleLock(Bangle.isLocked(), true); +handleLock(Bangle.isLocked());