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.