[Qt] Race condition in LayerTreeHost/Proxy can cause blank rendering staging-old
authorSimon Hausmann <simon.hausmann@nokia.com>
Wed, 23 May 2012 10:59:43 +0000 (12:59 +0200)
committerSimon Hausmann <simon.hausmann@nokia.com>
Wed, 23 May 2012 10:59:43 +0000 (12:59 +0200)
commit099acb52c93804122579d9f676b0466ddbec1daf
treef599e6b31b2100035c0e6ac3482a2a3e95d49d7e
parentcf69dac2fcf28dc5070fd53dce9f5244e591507e
[Qt] Race condition in LayerTreeHost/Proxy can cause blank rendering
https://bugs.webkit.org/show_bug.cgi?id=87239

Reviewed by Kenneth Rohde Christiansen.

On the UI process side the WebLayerTreeRenderer/LayerTreeHostProxy pair is
created with m_active = false, which makes it ignore any incoming layer updates.
It remains inactive until the ContentsSGNode is created and setActive(true) is called.

On the web process side the LayerTreeHost is created with m_waitingForUIProcess = false.

Those two variables must be in sync, otherwise a race condition can
happen: The web process sends updates to the ui process before the
ContentsSGNode is created. This can happen for example when re-using an
existing WebProcess to create a QQuickWebView and load a page very fast
from the disk cache. The update arrives on the ui process side, but it
is discarded because setActive(true) hasn't been called yet. As a
result any updates that would for example create and populate the tiles
required for rendering are ignored.

This patch ensures that the variables are initialized with the same values and that calling
setActive(true) will trigger the rendering of the next frame.

* UIProcess/WebLayerTreeRenderer.cpp:
(WebKit::WebLayerTreeRenderer::setActive):
* WebProcess/WebPage/qt/LayerTreeHostQt.cpp:
(WebKit::LayerTreeHostQt::LayerTreeHostQt):
Source/WebKit2/ChangeLog
Source/WebKit2/UIProcess/WebLayerTreeRenderer.cpp
Source/WebKit2/WebProcess/WebPage/qt/LayerTreeHostQt.cpp