Is there a list of devices that support onPartialUpdate?

I am poking around onPartialUpdate in a test watchface project. I am going watch model by model in the simulator and I am yet to find one that supports it (though I am checking AMOLED devices only). The code is:

  var yes = (Toybox.WatchUi.WatchFace has :onPartialUpdate);
System.println(yes ? "Has it" : "Doesn't have it");

Building with the SDK 7.2.1.

I've gotta be missing something obvious here... is that that it's not supported on AMOLED watches?

  • It's only on devices with an MIP display.

    Here's the list of supported devices from the API Doc in the 7.3.0 SDK.  It does seem to be missing some of the just announced f8 devices with a MIP display.

    Supported Devices:

    [Hide devices]

    • Approach® S60
    • Approach® S62
    • Captain Marvel
    • D2Tm Charlie
    • D2Tm Delta PX
    • D2Tm Delta S
    • D2Tm Delta
    • Darth VaderTm
    • DescentTm G1 / G1 Solar
    • DescentTm Mk1
    • DescentTm Mk2 / DescentTm Mk2i
    • DescentTm Mk2 S
    • EnduroTm
    • fēnix® 5 / quatix® 5
    • fēnix® 5 Plus
    • fēnix® 5S Plus
    • fēnix® 5S
    • fēnix® 5X / tactix® Charlie
    • fēnix® 5X Plus
    • fēnix® 6 / 6 Solar / 6 Dual Power
    • fēnix® 6 Pro / 6 Sapphire / 6 Pro Solar / 6 Pro Dual Power / quatix® 6
    • fēnix® 6S / 6S Solar / 6S Dual Power
    • fēnix® 6S Pro / 6S Sapphire / 6S Pro Solar / 6S Pro Dual Power
    • fēnix® 6X Pro / 6X Sapphire / 6X Pro Solar / tactix® Delta Sapphire / Delta Solar / Delta Solar - Ballistics Edition / quatix® 6X / 6X Solar / 6X Dual Power
    • fēnix® 7 / quatix® 7
    • fēnix® 7 Pro - Solar Edition (no Wi-Fi)
    • fēnix® 7 Pro
    • fēnix® 7S Pro
    • fēnix® 7S
    • fēnix® 7X / tactix® 7 / quatix® 7X Solar / EnduroTm 2
    • fēnix® 7X Pro - Solar Edition (no Wi-Fi)
    • fēnix® 7X Pro
    • First Avenger
    • Forerunner® 245 Music
    • Forerunner® 245
    • Forerunner® 255 Music
    • Forerunner® 255
    • Forerunner® 255s Music
    • Forerunner® 255s
    • Forerunner® 55
    • Forerunner® 645 Music
    • Forerunner® 645
    • Forerunner® 745
    • Forerunner® 935
    • Forerunner® 945 LTE
    • Forerunner® 945
    • Forerunner® 955 / Solar
    • Instinct® 2 / Solar / Dual Power / dēzl Edition
    • Instinct® 2S / Solar / Dual Power
    • Instinct® 2X Solar
    • Instinct® Crossover
    • MARQ® Adventurer
    • MARQ® Athlete
    • MARQ® Aviator
    • MARQ® Captain / MARQ® Captain: American Magic Edition
    • MARQ® Commander
    • MARQ® Driver
    • MARQ® Expedition
    • MARQ® Golfer
    • ReyTm
    • vívoactive® 3 Mercedes-Benz® Collection
    • vívoactive® 3 Music LTE
    • vívoactive® 3 Music
    • vívoactive® 3
    • vívoactive® 4
    • vívoactive® 4S
  • Ah, damn. It was behind the [View_devices] toggle. Thanks !

    It looks like onPartialUpdate is withheld from AMOLED watches. That's a shame.

  • It looks like onPartialUpdate is withheld from AMOLED watches. That's a shame.

    Yeah bc extending battery life and avoiding burn-in are paramount concerns for AMOLED displays. Burn-in isn't a factor for MIP, and MIP is less battery-hungry, so Garmin can get away with allowing the display to update every second, all the time (but still with limits when the user has not triggered high-power mode by turning their wrist.)

    https://developer.garmin.com/connect-iq/user-experience-guidelines/watch-faces/

    Low- and High-Power Modes

    Connect IQ watch faces typically operate in a low-power state where the system requests updates every minute. When the user gestures to look at the watch, the system will request the watch face enter a high-power state. During this period, typically 10 seconds, the watch face can enable timers and play animations. Use this time to add some action to your watch faces.

    Always Active

    MIP watch faces by default update once a minute. High-power mode does allow drawing seconds or a second hand for a period of time, but sometimes the user wants that kind of information available the moment their eyes focus on the watch.

    Always-active watch faces can perform a partial update of the screen every second. The update must operate under a 20 millisecond time frame, which does not allow updating the whole screen but can allow for an update on a small portion. For example, the seconds area of this watch face (highlighted in pink) could be updated once a second:

    Always On (AMOLED)

    Devices with AMOLED displays typically disable the display when not in use to save power, but they do allow the user to enable an always-on mode. Because long-term display use affects the battery life and can wear down the display, Connect IQ has special rules for AMOLED always-on mode. When the watch face enters always-on mode, the watch face will only update every minute, and each update is limited to using 10% of the available pixels of the display. In addition, a burn-in prevention mechanism will further guide the use of the display on some devices.

    Many AMOLED devices have a setting to disable the gesture that returns the watch face to high power mode to save power. To avoid a poor user experience, it is expected that Connect IQ watch faces for AMOLED devices support always-on mode to keep and watch face visible in these cases.

    https://forums.garmin.com/developer/connect-iq/b/news-announcements/posts/welcome-to-system-7

    Always on Always

    The original Venu was the first Connect IQ device with an AMOLED screen and introduced the heuristics to avoid screen burn-in. Newer devices allow watch faces to keep the screen on in “Always On” mode if the screen is using less than 10% of the display pixels.

    With API level 5.0.0, we are updating the heuristic from one based on pixels to one based on luminance. Now the screen will stay on if the display is using less than 10% of the total luminance. This allows you to use more pixels.

  • Yeah bc extending battery life and avoiding burn-in are paramount concerns for AMOLED displays.

    The thing though is that doing partial updates helps reducing the burn-in in many cases. Consider for example a watch face that shows HR in always-on mode. The more frequent the updates to that field, the less burn-in it will be causing.

  • Consider for example a watch face that shows HR in always-on mode. The more frequent the updates to that field, the less burn-in it will be causing.

    Even in MIP always active mode, onPartialUpdate() is only capable of updating a small area of the screen (like seconds and HR). That update alone (in the absence of any other measures) wouldn't be enough to avoid burn-in for the entire display. It's kinda like saying that displaying a barely changing Windows desktop on an OLED monitor 24/7/365 is ok as long you enable the seconds indicator on the clock (so that part of the screen would be constantly updating). In that case, the whole desktop and taskbar would potentially be burned in, except for the seconds indicator.

    As far as other measures go, Garmin implements pixel shifting for activity data screens (this has actually been reported as a bug by some devs who weren't expecting it), and they should implement pixel shifting for watch faces. Here's a good discussion about pixel shifting for watch faces:

    https://forums.garmin.com/outdoor-recreation/outdoor-recreation/f/epix-2/340003/pixel-shifting-protection-not-working-in-aod

    If you have an AMOLED device, I think you should be able to observe pixel shifting by taking screenshots at multiple intervals.

  • My point was that avoiding burn-in on AMOLED watches is not a valid reason for removing onPartialUpdate support.

    Even the argument that the power cost of updates on AMOLEDs is too high is rather debatable.

    It'd be nice to hear from someone at Garmin what the actual reasons are.

  • It requires special display HW.  Prior to the f5/935, MIP devices didn't support it either.  The display needs to be addressable by row, and there is the limit where the average time onPartialUpdate can run is 30ms.  So, if you want to update something like seconds, you set a clip region of only the rows where that value is location, as if you don't do that, you'll blow past the 30 limit which results in onPartialUpdate not being called anymore.

    Here's a whole thread about it from when onPartialUpdate was introduced:

    https://forums.garmin.com/developer/connect-iq/f/discussion/5156/1hz-watch-faces---q-a

    And the doc: https://developer.garmin.com/connect-iq/connect-iq-faq/how-do-i-get-my-watch-face-to-update-every-second/#howdoimakemywatchfaceupdateeverysecond

    This all came about before any of the watches had an AMOLED display.

  • It requires special display HW.  Prior to the f5/935, MIP devices didn't support it either.  The display needs to be addressable by row, and there is the limit where the average time onPartialUpdate can run is 30ms.  So, if you want to update something like seconds, you set a clip region of only the rows where that value is location, as if you don't do that, you'll blow past the 30 limit which results in onPartialUpdate not being called anymore.

    What does any of that have to do with why AMOLED devices don't support onPartialUpdate() / always active mode? The limitations of older MIP displays aren't relevant to AMOLED displays, are they.

    This all came about before any of the watches had an AMOLED display.

    You said it.

  • My point was that avoiding burn-in on AMOLED watches is not a valid reason for removing onPartialUpdate support.

    Even the argument that the power cost of updates on AMOLEDs is too high is rather debatable.

    It'd be nice to hear from someone at Garmin what the actual reasons are.

    You may not think those are valid reasons, but that's basically what Garmin said:

    Devices with AMOLED displays typically disable the display when not in use to save power, but they do allow the user to enable an always-on mode. Because long-term display use affects the battery life and can wear down the display, Connect IQ has special rules for AMOLED always-on mode. When the watch face enters always-on mode, the watch face will only update every minute, and each update is limited to using 10% of the available pixels of the display. In addition, a burn-in prevention mechanism will further guide the use of the display on some devices.

    You do have a point that burn-in seems to be less of a consideration here than battery life, assuming that a watchface continued to abide by the 10% pixel / brightness rule while updating every second.

    But as far as battery life goes, would a changing AMOLED display really draw that much more power than a static AMOLED display? We know that a MIP display only draws power when state is changed. But an AMOLED display draws power when pixels are lit. Does it draw more power when pixels change state?

    So yeah, I kinda see where one might question why an AMOLED watchface couldn't change every second (all the time), as long as the 10% pixel / brightness rule was followed in low power mode.

  • Amoled devices probably don't have displays where you can limit the rows updated, as is available with recent MIP devices. And even if they did, you'd likely want to update more rows than on 280x280 MIP device.  And that 30ms limit can be harsh especially with analog faces.