Strange Simulator behavior with devices < 2.0 SDK

Hi all,

I am trying to optimize one of my watch faces by avoiding complete redraw in "onUpdate". To do that I have a flag in "onShow" that is set whenever called causing the next call to "onUpdate" to redraw complete screen and then unset this flag, resulting in only changes being drawn on next call.This works fine in simulator for devices with SDK >= 2.0 but fails for devices with SDK < 2.0. For those devices I see the starting icon (blue triangle) and then slowly building up the watchface by rendering changed pixels. So my question is now whether I got something wrong in assuming that whenever a complete redraw is required, method "onShow" is called prior to that. If so, why is it not working in simulator and would it work on a real device?

Thanks!

Bye

  • Yes, there is room for improvement in ConnectIQ. We could make things really efficient and not update the display at all unless the app requests it or the display requires it. A watch face that only needs to update once a minute could save a lot of power that way. But that differs significantly from how things currently work, and compatibility is a serious concern.

  • At most times, onUpdate is only called every minute, while onPartialUpdate, every second where it can run the avg of 30ms.  If you're concerned about battery, maybe try running without onPartialUpdate and see how that impacts battery.

    Also when in low power mode, and while running watchface diagnostics, you can get a feel for the power budget.  Look at trying to get that number lower

  • So is this something you are considering to implement? Would be really great as the current difference between native watchfaces and ConnectIQ ones seems to be big, too big in my opinion. As battery life is a huge benefit of the Garmin watches (for me it was even the reason I am using them), extending it should be one of the most important things.

  • yes, Jim, this is what I was doing the last 4 days. I reduced the overall time by a big amount as stated in my earlier posts, but am disappointed that I was not able to see a big difference in the watch battery life. But I am still in the test phase, maybe the average will drop again.

  • I'm testing a WF right now, where the avg for onPartialUpdate is about 6.5-7ms.  I could cut that a bit by using a native font instead of a custom font, but in this case, I have a setting to do nothing in onPartialUpdate to cut that 7ms down.

  • How exactly are you determing the average time for "onPartialUpdate"? In my case the topmost number jumps between 5410 and 24150, depending on how many parts need to be redrawn. Calculating an average is difficult for me...

  • Watch the numbers for a full minute, and you can see where things are kind of centered around.  You want to stay closer to 5 than to 24.

    There are things you can do to help - an example I use is heart rate.  There's no reason to update it in  onPartialUpdate if it hasn't changed.  Only set a clip region if you are actually updating it.

  • Every second call is processed in 5410 microseconds, the other calls depend on how much needs to be redrawn. So timing is more in direction to 5ms than 24. My Watchface is updating other parts (like activity, heart rate, date, battery) only once per minute, and even there, for never devices, I am painting the changed areas only to a buffered bitmap and then drawing it to the actual dc. So from the amount of calculations I have limited my Watchface to the minimum (as far as I can judge it), but still the battery consumption seems to high for me...

    Bye

  • Hi ,

    do you think you can try to force my suggestion of giving the developer the information about "full redraw"-case in "onUpdate"? It would help a lot to optimize battery consumption for ConnectIQ watch faces.

    Thanks!

    Bye