mirror of https://github.com/espruino/BangleApps
Use the last draw time to set better timeouts
parent
20f4c10c9c
commit
1b733dd330
|
@ -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());
|
||||||
|
|
Loading…
Reference in New Issue