Amoled High to Low power mode transition in sim triggers burn in

Hi there,

SDK 4.0.10

macos 12.2.1

My understanding of Amoled devices is there are only specific requirements for when operating in Low Power Mode (triggered by onEnterSleep() - only 10% pixels can be lit and any pixel must not be lit for more than 3 mins) and that there are no restrictions when operating in full power (right or wrong?).  The watch will automatically transition to low power mode, calling onEnterSleep() and it's up to the developer to handle accordingly.

When I run my WF in the sim, it starts in Full Power Mode - displaying everything.  When I tick the "Low Power Mode" option from the settings menu I get the popup message and Burn In state is set to YES.  I don't understand why.  I have run my Low Power Mode setting (hour, minute hands, date and 4 tick marks overlaid with checkerboard) through the 24 hour heat map and all good there (I do this, temporarily, by coding the watchface to be asleep at startup - setting the boolean used by onEnterSleep() and onExitSleep() to false after initialize()).

Am I missing something?  Is this a simulator problem?

Thanks.

  • If it's not working in the sim, it may not be working right "in the wild".  It could be users don't notice it (they still see the time when they turn their wrist), they don't report it, or maybe even know there is a problem. I've got a few watch faces that support this on AMOLED/lcd devices, and all work fine in the sim.  I've also go an AMOLED device so I can see it work for real.

    Do you do anything like set the real background color and then set it to black for this?  Add println calls to your code so you can see exactly what's happening in the sim.

  • This is how I set the colour, depending on power mode:

        dc.setColor((!isAwake) ? 0x000000 : c[1], (!isAwake) ? 0x000000 : c[1]);
    	dc.clear();

    c[1] is the background colour the user has chosen - this is for high power mode, then it switches to black for low power

    I've put println statements in the main view functions (onEnterSleep, onExitSleep, onUpdate, etc) and they all fire as expected, in the right order, even when I get the popup message in the simulator...

  • in onEnterSleep(), in addition to setting the boolean to be low power, do you also do a 

    WatchUi.requestUpdate()

    so that onUpdate() is called right away?

  • Thanks Jim, yep I've got requestUpdate() in both onEnterSleep() and onExitSleep().

    I setup my environment on a windows VM and I'm seeing the same problem as I do on my mac, so it must be something I've done in my code.  I'll do some deeper digging and report back

  • ok, so I've found the problem. 

    I had implemented some code in the MIPS version of my watchface (which I've just used as the basis for the amoled version) which basically prevented onUpdate() from completing all it's actions if it was called more than once in one second (I noticed this was happening in earlier watchface development with transitions to/from onEnterSleep() and onExitSleep() ).  There weren't issues with this on MIPS displays, but on Amoled, it clearly meant that the screen wasn't clearing on transition before the burn-in check occurred.

    Thanks for the responses.  This thread certainly, at least, cleared up my understanding of what the restrictions were in low/high power mode for Amoled. 

    I've also been really lucky to have found an actual amoled device user out there who provided invaluable testing feedback (as I don't have an amoled device).