• General
  • Flickering OLED screens on Google Pixel smartphones (PWM)

Hi all.
I started using the Google Pixel 6a smartphone this year. I had no choice but to buy it because of the best privacy-respecting firmware called GrapheneOS. I have wanted to buy a Google Pixel for a very long time to start using GrapheneOS. I end up liking GrapheneOS itself a lot.

But there is one problem with the smartphone here. It's the display. First of all, I didn't know about the presence of PWM in these OLED displays until I switched from some cheap smartphone with an IPS display to the Pixel.

As I eventually learned, my eyes are highly sensitive to PWM. The display hurts my eyes.

Many Pixel smartphones have a very high screen pulsation coefficient. (PWM - Pulse Width Modulation) Especially the Pixel 6a, even at one hundred percent screen brightness the display pulsation coefficient is very high.

Applications such as OLED Saver / PWMfree do not help. Because, again, even at 100 percent brightness, PWM is present. Again, my eyes are quite sensitive.

I would like to see a response from the developers. Can the developers of GrapheneOS do something about this? At least something that would help to disable the PWM of the display fully or change the pulsation coefficient somehow.

But I'm not speaking for everyone, I mean as an optional setting (those who need it could use it, who have the same sensitive eyes)

[Either I will have to suffer with this smartphone or buy another phone, but it will be impossible to install GrapheneOS on it... I don't even know what to do]

But I hope that the developers of GrapheneOS will try to do something about it, for example add some option similar to DC Dimming? I hope that GrapheneOS can change this situation for the better.
If anybody has any ideas about this, I would be glad to hear them from you. Thanks for reading my long post

    @treequell

    Hi, how can I get a response from the GrapheneOS developers on this issue?

    TLDR: Is there anything the GrapheneOS developers can do about this? Like an optional setting for those who could use it. At least something that would help turn off the PWM of the display completely, or somehow change the pulsation coefficient itself so that this OLED display doesn't hurt my eyes.

    Since Google itself (as well as Samsung which makes such horrible OLED/AMOLED displays for smartphones) does not admit the DC Dimming feature, I have to write here

    • de0u replied to this.

      Hi there, I'm a community moderator, not a developer. I am not sure if such a feature is possible. If it is possible, and was implemented upstream by AOSP, then GrapheneOS would adopt it.

      I rather doubt it would be implemented by the GrapheneOS development team, but you could open a feature request on GitHub. You would need to clearly describe the motivation for such a feature.

      GrapheneOS is not completely closed to implementing and maintaining features which improve accessibility, but it's more a matter of prioritizing the resources and time the development team have available for fast security updates, and privacy- and security-related features.

      If such a feature is required, it would be preferable if it were implemented upstream by AOSP.

      matemo Is there anything the GrapheneOS developers can do about this? Like an optional setting for those who could use it. At least something that would help turn off the PWM of the display completely, or somehow change the pulsation coefficient itself so that this OLED display doesn't hurt my eyes.

      Is there information (such as hardware data sheets) that suggests such a feature is even possible on existing Pixel phone devices?

        de0u I want to start with the fact that Samsung currently manufactures displays for the Pixel smartphones. (In particular, the Pixel 6a smartphone display is made by Samsung).
        Samsung also manufactures its own smartphones that use OLED/AMOLED screens. And on Samsung smartphones, as well as on the Pixel, these displays use PWM to decrease/increase brightness.

        And the PWM frequency is low in most cases. And that's terrible. (Just like the Pixel, 240 hertz or so) Samsung refuses to add DC Dimming to their smartphones, saying that our screens already meet all safety requirements. And Xiaomi has DC Dimming, by the way.
        I have an opinion about that - they use PWM for better visibility of the picture when brightness is reduced. But what's the problem with adding an optional DC Dimming setting, like in smartphones from the same Xiaomi?

        And even Google is not trying to do anything about it, despite complaints from users. Yes, we're not the vast majority who have the same sensitive eyes, but what can we do? We can't stay silent. At best, we can try to find a solution to the problem.
        And in the meantime there are less and less decent mid-range or flagship smartphones with IPS displays.

        Did you know that the Pixel 6a's display supports a 90 hertz screen refresh rate, despite Google claiming otherwise? Heh. There's a driver modification on GitHub written by one enthusiast. But anyways.
        Maybe the same way, GrapheneOS developers can add some modification to the Kernel to increase the PWM frequency or somehow disable it at maximum brightness.

        I googled one interesting thing today - Kernel modification for Samsung smartphone on Exynos chip. It's from 2017, but still. It's called "TGPKernel, Kernel for the Samsung Galaxy S8." There's a feature there that allows you to turn off PWM ("Enable PWM Flicker-Free Fix") The S8 has Super AMOLED.
        It gives me great hope that GOS developers can implement something similar in their firmware to help users like me.

        • de0u replied to this.

          matemo This Elcomsoft blog post is interesting. It mentions an app called OLED Saver, though it was last updated in 2019.

          Do you know somebody with a recent Pixel running Google's stock OS who could test that app (or similar ones) to see if it works?

          Perhaps if somebody donated a Pixel running GrapheneOS to a developer of this sort of app they might be willing to do a GrapheneOS version.

            de0u Interesting blog, yes. I've already checked out this app, by the way. OLED Saver and PWMfree when I was still on the stock OS. And even on GrapheneOS I have already tested them.

            What they do is increase the brightness to the maximum available to them (the same can be done without the app) that is no higher than the user himself can do in the settings, and overlay an invisible (yet) black filter on the screen. So, when using dimming from the app, the black filter applied gets darker and darker depending on the brightness set in the app.

            The way OLED display works is the darker the image, the less voltage is applied to the LED. How do you get dark gray on an OLED display? Gray, dark gray, and light gray are really just shades of white. A gray pixel is obtained by forming a white pixel and then reducing the voltage going to the LEDs. On other smartphones this could work because some models completely turn off the PWM at 100 percent brightness.
            And here we should get supposedly DC Dimming, but it's not so easy on Google Pixel and Samsung smartphones.

            Because the main problem still remains - the PWM does not go anywhere. At maximum brightness, the display flickers because of PWM at 240 Hz.
            I think the PWM control is built into the kernel. But the application as well as the user cannot control it.

            • de0u replied to this.

              matemo I read a different blog post about Nintendo Switch devices with OLED displays, including high-speed video, showing that even at max brightness there was still some flicker.

              It might be the case that there is no way to get some phones to completely stop flickering. If there are some phones like that, then the GrapheneOS project really won't be able to fix them. And honestly I will be surprised if a GrapheneOS developer can invest the time to figure out whether or not some Pixel devices can be flicker-free - it would take a while, and the answer might be "no", so that developer time would have been wasted.

              You might look into demonstrating that some specific Pixel can be flicker-free. If so, maybe the development team could look into shipping code that does that. But I suspect it won't be productive for you to ask that they look into whether or not it's possible.

              Please note that I don't speak for the GrapheneOS project.

                alfred Yea, I've seen the Pixel 7 / 6 Pro / 6. Only I had enough money to buy a Pixel 6a. And even now, unfortunately, I don't think I can afford the other models.

                I just had a thought. It feels like Google is purposely putting these screens with such low PWM frequencies in cheaper models like the 4a, 6a, 7a, right on purpose to get people to buy the more expensive models.

                • de0u replied to this.

                  de0u I think the developers of GOS do not need to test on all smartphones at once. First, for example on the Pixel 6a. And then make a conclusion based on it.
                  There are people with sensitive eyes like mine. And of the developers almost no one tried to deal with PWM switching off on OLED screens, especially on the Pixel, because it is somehow accepted now that OLED screens have PWM and it is supposedly normal.
                  But this is just my opinion, please don't take it negatively.
                  If this possibility to disable PWM appears in GrapheneOS firmware, it will help not only me but also other people who use Google Pixel, because Google itself is not going to do it.

                  You might look into demonstrating that some specific Pixel can be flicker-free

                  I honestly do not even know how to demonstrate such a possibility, if I had the knowledge and ability to work with the kernel and the firmware, I would be happy to.

                  • de0u replied to this.

                    matemo It feels like Google is purposely putting these screens with such low PWM frequencies in cheaper models like the 4a, 6a, 7a, right on purpose to get people to buy the more expensive models.

                    In general when a company makes a cheaper model they do so by using a variety of cheaper components: cheaper screen, smaller screen, smaller battery, less RAM, lower-resolution camera, etc. This is quite purposeful, and the purpose is to offer a cheaper device for the customers who want that.

                    One potential strategy for getting the premium parts at a discount is buying used devices a year or so after they were released as new. Some people like to have the newest phone, and are willing to pay for that, but that produces a stream of devices that have been used only for a little while. Since Pixel devices receive firmware patches from Google for a long time (currently 5 years), buying a one-year-old premium device every four years might be a reasonable strategy.

                    matemo I honestly do not even know how to demonstrate such a possibility, if I had the knowledge and ability to work with the kernel and the firmware, I would be happy to.

                    It might be possible to collect a small amount of money each from a bunch of people and then hire somebody to do a feasibility investigation. There's probably a big gap between the effort to do some experiments and what it would take to produce solid code with a UI, so the experimentation step might be pretty cheap.

                    19 days later

                    nice seeing another kind soul bring this up!

                    judging review it appears that measurements of some that have DC-dimming function appear much more stable compared to oled as used by Samsung however unsure how stable the waveform of an oled display can be in contrast to LCD.

                    as for implementing it for gOS on pixel devices, not sure if the chipset or display controller support DC-dimming or PWM at 100 brightness can be avoided.

                      8 days later

                      Just bought a used 4a for GOS only. This sucks tremendously.

                      Google hiding the better options behind a millionaire paywall is pure abuse. We don't want anything special - just a God damn phone. It shouldn't cost more than 20-50 Euros like it used to. But those don't exist anymore. I don't need a 6 million mega pixel cam. I don't want a fingerprint sensor or any other bullshit. It's a phone. Ideally it can play MP3, that's about it.

                      Even a used low-end 4a costs several HUNDRED Euros, something the non-rich save up a year or two for, and then I find out it rapes our eyes?

                      WONDERFUL

                      Too bad GOS doesn't run on anything else. Can't find any cleaner phone that works as a phone than Pixels with GOS. But this means it's effectively impossible to look at.

                      If GOS could fix this (if it's even possible on this hardware), it would add a lot of value to it.

                      Right now it's not usable.

                      I thought going from LCD to OLED would be an upgrade - what a perfect marketing lie!

                      Consensus seems to be that oledsaver doesn't work. Any more experiences? I don't want to mess with proprietary apps that demand full permissions. But it's the only hope right now.

                        Something small that may or may not help a little:

                        Go to accessibility - extra dim. Turn that to lowest intensity, then turn screen brightness to whatever you need.

                        It makes more screen elements pure black = OLED off. Not sure that helps much when everything else is flickering, but fewer flickering pixels sound good.

                        If someone has a 2nd phone with a working slow-mo camera, we could analyze this and apps and test what works!

                          7 days later

                          Elephant Yeah, it's hard to say about OLED.

                          cltqbfk359 I agree with you.

                          I didn't knew about the presence of PWM in OLED/AMOLED either. Something that many manufacturers are hiding. And then people get eye strain from smartphones and don't know why.

                          Samsung for example does not admit this problem and says that their screens comply with all safety measures. What a pathetic lie.

                          It is a shame that there is no law in the EU (or anywhere else for that matter. and it can mostly affect this situation) that would regulate the safety of smartphone displays with PWM.

                          Whether we like it or not, whether we can see it or not, our eyes are exposed to the terrible PWM on Google Pixel smartphones. The only way to try and start fixing this on GrapheneOS first is to recognize the problem.

                          cltqbfk359 Extra Dim has the same method as the apps. Only it doesn't control the system brightness level (PWM doesn't change), it just dims the screen. Here I described how it works:

                          I've already checked out this app, by the way. OLED Saver and PWMfree when I was still on the stock OS. And even on GrapheneOS I have already tested them.

                          What they do is increase the brightness to the maximum available to them (the same can be done without the app) that is no higher than the user himself can do in the settings, and overlay an invisible (yet) black filter on the screen. So, when using dimming from the app, the black filter applied gets darker and darker depending on the brightness set in the app.

                          The way OLED display works is the darker the image, the less voltage is applied to the LED. How do you get dark gray on an OLED display? Gray, dark gray, and light gray are really just shades of white. A gray pixel is obtained by forming a white pixel and then reducing the voltage going to the LEDs. On other smartphones this could work because some models completely turn off the PWM at 100 percent brightness.

                          And here we should get supposedly DC Dimming, but it's not so easy on Google Pixel and Samsung smartphones.

                          Because the main problem still remains - the PWM does not go anywhere. At maximum brightness, the display flickers because of PWM at 240 Hz.

                          @treequell please add the "Development" tag to the topic title (without removing it from "General")

                          10 days later

                          This is going to be a long post. So, I've collected some info that can help GrapheneOS developers.

                          I recently came across this question on Reddit - "Is using max brightness guaranteed to be PWM free?". There was this comment - "Yes if the display has no HDR. But most OLED displays on smartphones today have HDR so they advertise 2 different max brightness values - for example 1200 nits max brightness typically, with 1750 nits max for HDR content.

                          This means individual LEDs can attain 1750 nits max brightness, but this will be only for HDR content. But this is very very bright for typical use and also unsustainable for long time (from thermal and power perspective) so they limit the individual LED to a lower typical value which means it must use PWM to have it at that lower-than-max brightness."


                          As we know, the Pixel 6a display supports HDR. I wanted to do an experiment.

                          The first thing I checked is that the brightness is set to 100 percent and adaptive mode is set in the display settings. Then I downloaded an image of an completely white background, opened the gallery and opened that image to full screen. I then took the camera, set the ISO to 3200 and took the first photo which shows the PWM flicker.

                          Then on YouTube, I opened an HDR video with completely white color also full screen. I took a photo with the same camera settings.

                          But a small remark - I do not have a device that measures the coefficient or frequency of PWM flickering, so the conclusion will be based on two different pictures. (and additionally the third one)
                          The results are as follows, there are 3 pictures in the gallery -

                          https://postimg.cc/gallery/cY1vXX5

                          Picture 1 - maximum brightness at 100% without HDR content (PWM 240Hz)
                          Picture 2 - HDR video is open and playing here, the width of flickering lines is less.
                          Picture 3 is the most unusual. This is also HDR video. You can see that the PWM frequency has decreased. I think this is because I turned off the video and waited 5 minutes before taking another picture, thus the temperature of the display decreased and the brightness was at its peak. The PWM frequency decreased a lot. And the duty cycle stayed as short, it didn't increase (which is a good thing)

                          What can I say:

                          Samsung displays are one of the worst in terms of flicker. They even put these AMOLED displays on their most expensive smartphones (just like Google, of course), which have a PWM flicker frequency of 240 Hz.
                          So, I've demonstrated some kind of opportunity for GrapheneOS developers. I'm not sure if FlickerFree is possible, but it is still possible to add an option to reduce PWM, which would be good for the eyes. And the method of adjusting the brightness when the option is enabled, can be done as in the app OLED saver (ie overlaying a dark layer depending on the preferred level of brightness) Thus we will get an improvised DC Dimming. (by the way, smartphones with DC Dimming also have PWM, but less).

                          Since I do not have access to kernel and do not know how to modify it, the conclusion is based on surface experience. Maybe it will be possible to get rid of PWM at all, only GOS developers will be able to find out.


                          Also saw another interesting Kernel for Google Pixel 2 & Pixel 2 XL today.
                          It's called Moonflower Kernel. It is available on Github - https://github.com/JanPetrucci27/android_kernel_google_wahoo
                          Based on the description, it implements Flicker-Free (DC Dimming) as the developer of this kernel wrote on GitHub:

                          " DC Dimming was provided in the Nov 7, 2022 release -.
                          " - Introducing DC Dimming "Flicker-free" display driver:
                          "The flicker free provides flicker free function without changing panel hardware brightness to avoid PWM flicker on OLED devices."
                          -"Backlight dimmer" and "Backlight max brightness" option. "

                          At the path "android_kernel_google_google_wahoo/drivers/video/fbdev/msm/" I can see some changes. There are also two files there "flicker_free.c" and "flicker_free.h".

                          I don't have a Pixel 2 or 2 XL, but I think the changes in the kernel set the display controller to run at full brightness, for example, instead of 800 nits it will get 1300 nits of brightness without PWM. Then, a dimming filter is applied on top of the screen. The same way as the OLED Saver. Then, you get improvised DC Dimming without PWM because of the changes in the kernel. But I can only speculate how it works.

                          @GrapheneOS Dear GrapheneOS administrators and developers. At least do not leave this problem without attention. Including me.

                          I have provided you with as much information as I could. I hope that you will take this situation with understanding.

                          If there is a problem that hurts the eyes of many Pixel smartphone owners, including those who use GrapheneOS firmware, which Google does not want to fix, and you have the opportunity to do so, why not? I'd like to hear some reaction from you on this issue, rather than just ignoring the situation.

                          Aside from the privacy features, adding this feature 100% would be a good idea. People who suffer from PWM will switch to GOS.

                          Thank you for your attention to this issue, and I hope you will keep an open mind about the situation.