[Qt] [WK2] Support threaded renderer in WK2
authorostapenko.viatcheslav@nokia.com <ostapenko.viatcheslav@nokia.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sun, 11 Mar 2012 08:26:07 +0000 (08:26 +0000)
committerostapenko.viatcheslav@nokia.com <ostapenko.viatcheslav@nokia.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sun, 11 Mar 2012 08:26:07 +0000 (08:26 +0000)
commite411740614d37a1c865da4cabbe86568b0107f76
tree75c52dba3016716850ea3251ed55727432ed8a1d
parentb17fea31bf727c9856a047bca0da894f616cbb3a
[Qt] [WK2] Support threaded renderer in WK2
https://bugs.webkit.org/show_bug.cgi?id=76661

Source/WebCore:

Reviewed by Noam Rosenthal.

Add TransformationMatrix conversions from/to Qt QMatrix4x4. Used by Qt WebKit2
rendering and tested by Qt WebKit2 API tests.

* platform/graphics/qt/TransformationMatrixQt.cpp:
(WebCore::TransformationMatrix::operator QMatrix4x4):
(WebCore):
(WebCore::TransformationMatrix::TransformationMatrix):
* platform/graphics/transforms/TransformationMatrix.h:
(TransformationMatrix):

Source/WebKit2:

Reviewed by Noam Rosenthal.

Implement Qt5 threaded rendering support for Qt WebKit2.
Parts of LayerTreeHostProxy which contain layer tree and layer painting objects
are moved to separate class called WebLayerTreeRenderer. WebLayerTreeRenderer is
thread safe ref counted and referenced by LayerTreeHostProxy and paint node.
All layer tree and graphics objects are created, accessed and deallocated from Qt
Scenegraph's paint thread only.
Layer tree updates from render queue are fetched in updatePaintNode call stack when
main thread is locked.
Messages from paint thread to web process are passed through MainThreadGuardedInvoker
call gate (implemented by Noam Rosenthal and previously reviewed by Kenneth Rohde
Christiansen).

* Target.pri:
* UIProcess/API/qt/qquickwebpage.cpp:
(PageProxyNode::PageProxyNode):
(PageProxyNode::render):
(PageProxyNode::~PageProxyNode):
(PageProxyNode::layerTreeRenderer):
(PageProxyNode):
(PageProxyNode::setScale):
(QQuickWebPage::updatePaintNode):
(QQuickWebPagePrivate::~QQuickWebPagePrivate):
* UIProcess/LayerTreeHostProxy.cpp: Added.
(WebKit):
(WebKit::LayerTreeHostProxy::LayerTreeHostProxy):
(WebKit::LayerTreeHostProxy::~LayerTreeHostProxy):
(WebKit::LayerTreeHostProxy::paintToCurrentGLContext):
(WebKit::LayerTreeHostProxy::paintToGraphicsContext):
(WebKit::LayerTreeHostProxy::updateViewport):
(WebKit::LayerTreeHostProxy::dispatchUpdate):
(WebKit::LayerTreeHostProxy::createTileForLayer):
(WebKit::LayerTreeHostProxy::updateTileForLayer):
(WebKit::LayerTreeHostProxy::removeTileForLayer):
(WebKit::LayerTreeHostProxy::deleteCompositingLayer):
(WebKit::LayerTreeHostProxy::setRootCompositingLayer):
(WebKit::LayerTreeHostProxy::syncCompositingLayerState):
(WebKit::LayerTreeHostProxy::didRenderFrame):
(WebKit::LayerTreeHostProxy::createDirectlyCompositedImage):
(WebKit::LayerTreeHostProxy::destroyDirectlyCompositedImage):
(WebKit::LayerTreeHostProxy::setVisibleContentsRectForPanning):
(WebKit::LayerTreeHostProxy::setVisibleContentsRectForScaling):
(WebKit::LayerTreeHostProxy::renderNextFrame):
(WebKit::LayerTreeHostProxy::purgeBackingStores):
* UIProcess/LayerTreeHostProxy.h:
(WebKit):
(LayerTreeHostProxy):
(WebKit::LayerTreeHostProxy::layerTreeRenderer):
* UIProcess/WebLayerTreeRenderer.cpp: Renamed from Source/WebKit2/UIProcess/qt/LayerTreeHostProxyQt.cpp.
(WebKit):
(MainThreadGuardedInvoker):
(WebKit::MainThreadGuardedInvoker::call):
(WebKit::MainThreadGuardedInvoker::MainThreadGuardedInvoker):
(WebKit::MainThreadGuardedInvoker::invoke):
(WebKit::WebLayerTreeRenderer::callOnMainTread):
(WebKit::WebLayerTreeRenderer::WebLayerTreeRenderer):
(WebKit::WebLayerTreeRenderer::~WebLayerTreeRenderer):
(WebKit::WebLayerTreeRenderer::createLayer):
(WebKit::WebLayerTreeRenderer::paintToCurrentGLContext):
(WebKit::WebLayerTreeRenderer::syncAnimations):
(WebKit::WebLayerTreeRenderer::paintToGraphicsContext):
(WebKit::WebLayerTreeRenderer::setVisibleContentsRectForScaling):
(WebKit::WebLayerTreeRenderer::updateViewport):
(WebKit::WebLayerTreeRenderer::syncLayerParameters):
(WebKit::WebLayerTreeRenderer::deleteLayer):
(WebKit::WebLayerTreeRenderer::ensureLayer):
(WebKit::WebLayerTreeRenderer::setRootLayerID):
(WebKit::WebLayerTreeRenderer::getBackingStore):
(WebKit::WebLayerTreeRenderer::createTile):
(WebKit::WebLayerTreeRenderer::removeTile):
(WebKit::WebLayerTreeRenderer::updateTile):
(WebKit::WebLayerTreeRenderer::createImage):
(WebKit::WebLayerTreeRenderer::destroyImage):
(WebKit::WebLayerTreeRenderer::assignImageToLayer):
(WebKit::WebLayerTreeRenderer::swapBuffers):
(WebKit::WebLayerTreeRenderer::flushLayerChanges):
(WebKit::WebLayerTreeRenderer::renderNextFrame):
(WebKit::WebLayerTreeRenderer::ensureRootLayer):
(WebKit::WebLayerTreeRenderer::syncRemoteContent):
(WebKit::WebLayerTreeRenderer::purgeGLResources):
(WebKit::WebLayerTreeRenderer::purgeBackingStores):
(WebKit::WebLayerTreeRenderer::detach):
(WebKit::WebLayerTreeRenderer::appendUpdate):
* UIProcess/WebLayerTreeRenderer.h: Copied from Source/WebKit2/UIProcess/LayerTreeHostProxy.h.
(WebKit):
(WebLayerTreeRenderer):
(WebKit::WebLayerTreeRenderer::layerByID):
(WebKit::WebLayerTreeRenderer::rootLayer):
(WebKit::WebLayerTreeRenderer::notifyAnimationStarted):
(WebKit::WebLayerTreeRenderer::notifySyncRequired):
(WebKit::WebLayerTreeRenderer::showDebugBorders):
(WebKit::WebLayerTreeRenderer::showRepaintCounter):
(WebKit::WebLayerTreeRenderer::paintContents):

Tools:

Remove disabling of threaded rendering.

Reviewed by Noam Rosenthal.

* MiniBrowser/qt/main.cpp:
(main):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@110388 268f45cc-cd09-0410-ab3c-d52691b4dbfc
12 files changed:
Source/WebCore/ChangeLog
Source/WebCore/platform/graphics/qt/TransformationMatrixQt.cpp
Source/WebCore/platform/graphics/transforms/TransformationMatrix.h
Source/WebKit2/ChangeLog
Source/WebKit2/Target.pri
Source/WebKit2/UIProcess/API/qt/qquickwebpage.cpp
Source/WebKit2/UIProcess/LayerTreeHostProxy.cpp [new file with mode: 0644]
Source/WebKit2/UIProcess/LayerTreeHostProxy.h
Source/WebKit2/UIProcess/WebLayerTreeRenderer.cpp [moved from Source/WebKit2/UIProcess/qt/LayerTreeHostProxyQt.cpp with 66% similarity]
Source/WebKit2/UIProcess/WebLayerTreeRenderer.h [new file with mode: 0644]
Tools/ChangeLog
Tools/MiniBrowser/qt/main.cpp