Watch face: onPartialUpdate does not work on all devices which support this function.

I've developed watch faces with the seconds field present on screen, but a few users report me that they can't see seconds updates on fenix 5/5X. I can't reproduce the issue nor on my fenix 5x nor on the ConnectIQ Simulator.
What kind of thing i could lose when i read user settings or something like this?


Watchfaces app in stroe: https://apps.garmin.com/en-US/apps/9...5-f136f2c3e61f.
  • Could you be doing something where you exceed the power budget for some users? How much are you updating in onPartialUpdate()? Just the seconds, or other things too? Are you on the same FW as the users? The current beta for both is 4.16.
  • Could you be doing something where you exceed the power budget for some users? How much are you updating in onPartialUpdate()? Just the seconds, or other things too? Are you on the same FW as the users? The current beta for both is 4.16.


    1. i suppose i could not
    2. ordinary lines of code: getClockTime(); setClip; setColor; drawText; that's all
    3. just the seconds
    4. yes, FWs are difference! The user who reported the issue has FW 4.10. I installed 4.14beta, but a couple weeks ago i've tested the onPartialUpdate on 4.10.
  • You are doing setClip() in onPartialUpdate(), correct? Without that, you'll exceed the power budget for sure, and you'll stop getting onPartialUpdates after about 2 minutes. It will look fine until that point, then stop, but if you leave the WF and come back, you see the calls again for about 2 minutes. Are you using the delegate to catch when you exceed the power budget?
  • You are doing setClip() in onPartialUpdate(), correct? Without that, you'll exceed the power budget for sure, and you'll stop getting onPartialUpdates after about 2 minutes. It will look fine until that point, then stop, but if you leave the WF and come back, you see the calls again for about 2 minutes. Are you using the delegate to catch when you exceed the power budget?


    All of available for me devices work correctly. Usual users report the HR sensor issue, but only one user reported the seconds update does not work while HR is updating as expected.
    I can suppose that the follow code does not work on the watch of the user, because "--" draws instead of seconds:

    onUpdate:
    if (!(Toybox.WatchUi.WatchFace has :onPartialUpdate)){
    dc.drawText(_x, y, realFont, "--", justification);
    }
    ...


    onPartialUpdate:
    dc.setClip(sectRect[0], sectRect[1], sectRect[2], sectRect[3]);
    dc.setColor(color, Gfx.COLOR_TRANSPARENT);
    dc.drawText(_x, y, font, value, justification);
    dc.drawText(_xf, y, fontFraction, fract, justification);
  • If the HR is changing often, that's probably because you're not in low power mode, and onUpdate() itself is being called every second. Do up display seconds in this case, or are you only showing them in onPartialUpdate()?
  • If the HR is changing often, that's probably because you're not in low power mode, and onUpdate() itself is being called every second. Do up display seconds in this case, or are you only showing them in onPartialUpdate()?


    Yes,
    the same code calls in both cases onUpdate and onPartialUpdate.
  • Where are you doing the clearClip()?
  • Where are you doing the clearClip()?



    function onPartialUpdate(dc) {

    dc.setClip(sectRect[0], sectRect[1], sectRect[2], sectRect[3]); dc.setColor(color, Gfx.COLOR_TRANSPARENT); dc.drawText(_x, y, font, value, justification); dc.drawText(_xf, y, fontFraction, fract, justification);

    }

  • That's setClip() - I was asking about clearClip().

    New question - how big is the clip region in setClip()?
  • That's setClip() - I was asking about clearClip().

    New question - how big is the clip region in setClip()?



    oops, sorry.

    no, i don't use clearClip just draw old text with background color. clip region is 1 pixel smaller than rectangle inside the seconds frame ~ 80x20px