Recently I opened an AOSP bug: https://code.google.com/p/android/is...etail?id=82922
This concerns the nexus 5's panel not reaching a full 60hz, or even within the range of error of CVT timings typically used in displays. Vsync timestamps are in the range of 58.6hz to 58.8hz, and the result is disastrous: stuttering. The problem is that timing loops assume the display is pretty close to 60hz, and try to synchronize to an even division of that. But waiting for vsync takes too long, and these programs skip frames--about 1 frame every 2/3 second --to keep up.
As a result, games aren't smooth at all. They hiccup regularly when smooth motion is attempted. Note that this isn't universally apparent; programs without an internal timer like the browser, launcher, or even some games, might just refresh whenever the vsync is ready, which is presumably how this was missed by the devs at LG/Google. 2D games suffer the worst.
I've tried to fix this. My initial suspicions lied with the initialization code and timings in the panel device file in the kernel, but I can't seem to make a difference with any changes to it.
So, I'd appreciate any help I can get with this. If anyone experienced in this area of kernel development has any suspicions about this, post them.
I'd also like some other people to test this if they can. I actually measured the timestamps from /sys/devices/virtual/graphics/fb0/vsync_event to confirm this is on the kernel level, but an easier way is to download the RetroArch app from the play store and use the calibrate refresh feature in the settings. I'm particularly looking for results from Cyanogen kernels, as those modify the msm dsi framework.
It'd also help to star the bug and try to get the Google devs' attention on this.
Thanks
This concerns the nexus 5's panel not reaching a full 60hz, or even within the range of error of CVT timings typically used in displays. Vsync timestamps are in the range of 58.6hz to 58.8hz, and the result is disastrous: stuttering. The problem is that timing loops assume the display is pretty close to 60hz, and try to synchronize to an even division of that. But waiting for vsync takes too long, and these programs skip frames--about 1 frame every 2/3 second --to keep up.
As a result, games aren't smooth at all. They hiccup regularly when smooth motion is attempted. Note that this isn't universally apparent; programs without an internal timer like the browser, launcher, or even some games, might just refresh whenever the vsync is ready, which is presumably how this was missed by the devs at LG/Google. 2D games suffer the worst.
I've tried to fix this. My initial suspicions lied with the initialization code and timings in the panel device file in the kernel, but I can't seem to make a difference with any changes to it.
So, I'd appreciate any help I can get with this. If anyone experienced in this area of kernel development has any suspicions about this, post them.
I'd also like some other people to test this if they can. I actually measured the timestamps from /sys/devices/virtual/graphics/fb0/vsync_event to confirm this is on the kernel level, but an easier way is to download the RetroArch app from the play store and use the calibrate refresh feature in the settings. I'm particularly looking for results from Cyanogen kernels, as those modify the msm dsi framework.
It'd also help to star the bug and try to get the Google devs' attention on this.
Thanks
0 commentaires:
Enregistrer un commentaire