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.

  • The simulator works on a mac as far as I’m aware. I would guess maybe you’re using more than 10% of pixels? Perhaps it only checks that once and you’re somehow bypassing that check with your “hack”. But I’m not sure.

  • I only turn my hack on when I want to make sure low power mode passes the heat map test.  This is why I think maybe there's an issue with triggering low power mode in the sim.

    Without my hack, when I start my WF, it's in full power, then I click Low Power Mode and I get the warning popup and the screen goes off.  Doesn't make sense, unless, the restrictions apply irrespective of the power mode you're in?

  • In the sim, turn on file>view screen heat map.

    If you're not in low power mode, the screen is white. but when you switch to low power, you'll start to see things change.  The pixels that are black will show as green.  The pixels that aren't black, will first show as whiteish, but change as the pixel is on longer.  If you have more than 10% of them on, you'll get the message right away.  If a pixel is on 3 minutes, it will be red and you can see where that is on the screen (all it takes is one pixel that's on too long to shut down the display). You can use "toggel power mode" on that screen to switch between low and high power. 

    You can run a 24hr simulation there too.  Things like a time of "12:00" will have more pixels on than "1:00" so you might be under 10% at 1:00 but over 10% at 12:00

    I'm on windows, but this has worked since the original venu was introduced.  Here's what I see with a properly running watch face in low power mode in the sim.  I'm using a checker board, so you see the time looks to be a light green.

    The same watch face where I move the time around and don't use the checkerboard:

  • Thanks Jim, yep I can start my watch, then start the Heat Map (watch is now running in high power mode), but as soon as I hit the "Toggle Power Mode" button I get the burn in message.  It's almost as if it's been monitoring the pixels whilst in high power mode and only when I switch to Low Power mode does it then decide to popup the warning message (and turn off the display).  My understanding is the restrictions are only ON when in Low Power mode?

  • Here's the same watch face I've been using in this thread, but it's not in low power mode. 100% of the pixels are on.  switching to low power works fine.

    in onUpdate, as soon as I see I'm in low power and that burnin protection is needed, I set the colors to black and do a dc.clear()

  • Thanks Jim.  

    I started this thread because I wasn't 100% sure I understood what the real restrictions were with amoled, or whether what I was seeing was an issue with the (mac?) sim.  I'm now thinking it's more the latter - maybe another MAC user might be able to confirm?  In the meantime, I might try an establish my dev environment on a Windows machine and see what difference that makes.

    I follow the same pattern.  onEnterSleep() sets a variable that's read by onUpdate(), which clears the screen with black and only turns on the hour and minute hands with a checkerboard overlay.  Works fine.  It's just that for some reason switching from high to low power in the simulator triggers the burn in condition, for me (on my mac).

  • Is this your first attempt to handle burnin on a device?  This has been around since the venu came out, and if it was a sim issue on the mac, it probably would have seen before now.  In onUpdate, are you doing any drawing before you clear the screen to black?

  • hi, if I understand well,

    System.getDeviceSettings().requiresBurnInProtection always returns true with AMOLED devices, no matter if you are in low or hight power level. this value does not check if you apply well the restriction.

    it only returns false if the device is non AMOLED.

  • On AMOLED devices (or LCD, like the Venu Sq) it's always true and doesn't consider if the device is in high or low power.

    I set a boolen in initialize()

    sSettings=Sys.getDeviceSettings();
    if(sSettings has :requiresBurnInProtection) {
    canBurnIn=sSettings.requiresBurnInProtection;
    }

    Then in onUpdate, another boolean that's toggled in onEnterSleep()/onExitSleep(), so

    if(inLowPower && canBurnIn) {}  //do special stuff for AOD

    else {}  //do things normally

  • Thanks for the responses so far.  Yes, this is my first attempt at an amoled watch face (I've created a MIPS one), but it seems to be working ok in the wild with AOD set.  It was just frustrating me that burn in kept triggering in the sim, in high power mode - which is why I was questioning my understanding.

    I check burninprotection at initialize (becuase it doesn;t change), but my amoled watchface "handler" is in a separate .mc file controlled by jungles file anyway, so it doesn't provide much value (unless garmin later disables burninprotection on these devices - yeah right!).  I understand why you might check burninprotection more in a common code base (shared between MIPS and AMOLED devices)

    I think I'm familiar with building a watchface, but I don't for a minute think I know everything.  I've got the boolean set/unset in onEnterSleep() and onExitSleep().  I set the colour and clear at the very top of onUpdate() (and colour is set to black in Low Power Mode), nothing is drawn before this.  Like I said, this watchface is working in the wild, in AOD mode.

    Appreciate the responses so far.  Is there anything else I should look at?