Wait the remaining of the 60FPS cap delay rather than not paint.
Returning true if called faster than 60FPS means
we are not drawing and ask for the framework to call
us again; this works in general because the framework recopy
the previous framebuffer. But in some cases, it didn't, causing
the webview to flicker. A correct fix would be to introduce
the capping in framework rather than try to doing it in the
webview; in the meantime we will sleep the remaining of the delay
as a workaround, so that we still provide the GPU
benefits we wanted (at >60FPS the GPU was being saturated in
some cases).
bug:
3500655
Change-Id: Ibaa1d93e0a13433a2c842b19b58538894fdaa7e4
double currentTime = WTF::currentTime();
double delta = currentTime - m_prevDrawTime;
- if (delta < FRAMERATE_CAP)
- return true;
+ if (delta < FRAMERATE_CAP) {
+ unsigned int usecs = (FRAMERATE_CAP - delta) * 1E6;
+ usleep(usecs);
+ }
m_prevDrawTime = currentTime;