Title: [134278] trunk/Source/WebKit2
Revision
134278
Author
[email protected]
Date
2012-11-12 12:14:48 -0800 (Mon, 12 Nov 2012)

Log Message

More work on remote layer flushing
https://bugs.webkit.org/show_bug.cgi?id=101960

Reviewed by Andreas Kling.

* WebProcess/WebPage/mac/RemoteGraphicsLayer.h:
* WebProcess/WebPage/mac/RemoteGraphicsLayer.mm:
(WebKit::RemoteGraphicsLayer::flushCompositingState):
Call recursiveCommitChanges.

(WebKit::RemoteGraphicsLayer::flushCompositingStateForThisLayerOnly):
Add stub function for now.

(WebKit::RemoteGraphicsLayer::recursiveCommitChanges):
Call flushCompositingStateForThisLayerOnly and then call recursiveCommitChanges recursively on all the child layers.

* WebProcess/WebPage/mac/RemoteLayerTreeController.h:
* WebProcess/WebPage/mac/RemoteLayerTreeController.mm:
(WebKit::RemoteLayerTreeController::create):
(WebKit::RemoteLayerTreeController::RemoteLayerTreeController):
This now takes a web page.

(WebKit::RemoteLayerTreeController::setRootLayer):
Add empty function.

(WebKit::RemoteLayerTreeController::layerFlushTimerFired):
Call flushLayers explicitly.

(WebKit::RemoteLayerTreeController::flushLayers):
Force a layout and then sync all the compositing layers.

* WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm:
(WebKit::RemoteLayerTreeDrawingArea::RemoteLayerTreeDrawingArea):
RemoteLayerTreeController::create now takes a web page.

(WebKit::RemoteLayerTreeDrawingArea::setRootCompositingLayer):
Call the remote layer tree controller.

Modified Paths

Diff

Modified: trunk/Source/WebKit2/ChangeLog (134277 => 134278)


--- trunk/Source/WebKit2/ChangeLog	2012-11-12 20:08:27 UTC (rev 134277)
+++ trunk/Source/WebKit2/ChangeLog	2012-11-12 20:14:48 UTC (rev 134278)
@@ -1,5 +1,45 @@
 2012-11-12  Anders Carlsson  <[email protected]>
 
+        More work on remote layer flushing
+        https://bugs.webkit.org/show_bug.cgi?id=101960
+
+        Reviewed by Andreas Kling.
+
+        * WebProcess/WebPage/mac/RemoteGraphicsLayer.h:
+        * WebProcess/WebPage/mac/RemoteGraphicsLayer.mm:
+        (WebKit::RemoteGraphicsLayer::flushCompositingState):
+        Call recursiveCommitChanges.
+
+        (WebKit::RemoteGraphicsLayer::flushCompositingStateForThisLayerOnly):
+        Add stub function for now.
+
+        (WebKit::RemoteGraphicsLayer::recursiveCommitChanges):
+        Call flushCompositingStateForThisLayerOnly and then call recursiveCommitChanges recursively on all the child layers.
+
+        * WebProcess/WebPage/mac/RemoteLayerTreeController.h:
+        * WebProcess/WebPage/mac/RemoteLayerTreeController.mm:
+        (WebKit::RemoteLayerTreeController::create):
+        (WebKit::RemoteLayerTreeController::RemoteLayerTreeController):
+        This now takes a web page.
+
+        (WebKit::RemoteLayerTreeController::setRootLayer):
+        Add empty function.
+
+        (WebKit::RemoteLayerTreeController::layerFlushTimerFired):
+        Call flushLayers explicitly.
+
+        (WebKit::RemoteLayerTreeController::flushLayers):
+        Force a layout and then sync all the compositing layers.
+
+        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm:
+        (WebKit::RemoteLayerTreeDrawingArea::RemoteLayerTreeDrawingArea):
+        RemoteLayerTreeController::create now takes a web page.
+
+        (WebKit::RemoteLayerTreeDrawingArea::setRootCompositingLayer):
+        Call the remote layer tree controller.
+
+2012-11-12  Anders Carlsson  <[email protected]>
+
         Layer property changes should schedule a remote layer flush
         https://bugs.webkit.org/show_bug.cgi?id=101951
 

Modified: trunk/Source/WebKit2/WebProcess/WebPage/mac/RemoteGraphicsLayer.h (134277 => 134278)


--- trunk/Source/WebKit2/WebProcess/WebPage/mac/RemoteGraphicsLayer.h	2012-11-12 20:08:27 UTC (rev 134277)
+++ trunk/Source/WebKit2/WebProcess/WebPage/mac/RemoteGraphicsLayer.h	2012-11-12 20:14:48 UTC (rev 134278)
@@ -44,8 +44,11 @@
     virtual void setName(const String&) OVERRIDE;
     virtual void setNeedsDisplay() OVERRIDE;
     virtual void setNeedsDisplayInRect(const WebCore::FloatRect&) OVERRIDE;
+    virtual void flushCompositingState(const WebCore::FloatRect&) OVERRIDE;
+    virtual void flushCompositingStateForThisLayerOnly() OVERRIDE;
 
     void noteLayerPropertiesChanged(unsigned layerChanges);
+    void recursiveCommitChanges();
 
     RemoteLayerTreeController* m_controller;
 

Modified: trunk/Source/WebKit2/WebProcess/WebPage/mac/RemoteGraphicsLayer.mm (134277 => 134278)


--- trunk/Source/WebKit2/WebProcess/WebPage/mac/RemoteGraphicsLayer.mm	2012-11-12 20:08:27 UTC (rev 134277)
+++ trunk/Source/WebKit2/WebProcess/WebPage/mac/RemoteGraphicsLayer.mm	2012-11-12 20:14:48 UTC (rev 134278)
@@ -73,6 +73,16 @@
     // FIXME: Implement this.
 }
 
+void RemoteGraphicsLayer::flushCompositingState(const FloatRect&)
+{
+    recursiveCommitChanges();
+}
+
+void RemoteGraphicsLayer::flushCompositingStateForThisLayerOnly()
+{
+    // FIXME: Flush the changed properties.
+}
+
 void RemoteGraphicsLayer::noteLayerPropertiesChanged(unsigned layerChanges)
 {
     if (!m_uncommittedLayerChanges && m_client)
@@ -80,4 +90,14 @@
     m_uncommittedLayerChanges |= layerChanges;
 }
 
+void RemoteGraphicsLayer::recursiveCommitChanges()
+{
+    flushCompositingStateForThisLayerOnly();
+
+    for (size_t i = 0; i < children().size(); ++i) {
+        RemoteGraphicsLayer* graphicsLayer = static_cast<RemoteGraphicsLayer*>(children()[i]);
+        graphicsLayer->recursiveCommitChanges();
+    }
+}
+
 } // namespace WebKit

Modified: trunk/Source/WebKit2/WebProcess/WebPage/mac/RemoteLayerTreeController.h (134277 => 134278)


--- trunk/Source/WebKit2/WebProcess/WebPage/mac/RemoteLayerTreeController.h	2012-11-12 20:08:27 UTC (rev 134277)
+++ trunk/Source/WebKit2/WebProcess/WebPage/mac/RemoteLayerTreeController.h	2012-11-12 20:14:48 UTC (rev 134278)
@@ -31,21 +31,26 @@
 
 namespace WebKit {
 
+class WebPage;
+
 class RemoteLayerTreeController : public WebCore::GraphicsLayerFactory {
 public:
-    static PassOwnPtr<RemoteLayerTreeController> create();
+    static PassOwnPtr<RemoteLayerTreeController> create(WebPage*);
     ~RemoteLayerTreeController();
 
+    void setRootLayer(WebCore::GraphicsLayer*);
     void scheduleLayerFlush();
 
 private:
-    RemoteLayerTreeController();
+    explicit RemoteLayerTreeController(WebPage*);
 
     // WebCore::GraphicsLayerFactory
     virtual PassOwnPtr<WebCore::GraphicsLayer> createGraphicsLayer(WebCore::GraphicsLayerClient*) OVERRIDE;
 
     void layerFlushTimerFired(WebCore::Timer<RemoteLayerTreeController>*);
+    void flushLayers();
 
+    WebPage* m_webPage;
     WebCore::Timer<RemoteLayerTreeController> m_layerFlushTimer;
 };
 

Modified: trunk/Source/WebKit2/WebProcess/WebPage/mac/RemoteLayerTreeController.mm (134277 => 134278)


--- trunk/Source/WebKit2/WebProcess/WebPage/mac/RemoteLayerTreeController.mm	2012-11-12 20:08:27 UTC (rev 134277)
+++ trunk/Source/WebKit2/WebProcess/WebPage/mac/RemoteLayerTreeController.mm	2012-11-12 20:14:48 UTC (rev 134278)
@@ -27,19 +27,24 @@
 #import "RemoteLayerTreeController.h"
 
 #import "RemoteGraphicsLayer.h"
+#import "WebPage.h"
+#import <WebCore/Frame.h>
+#import <WebCore/FrameView.h>
+#import <WebCore/Page.h>
 #import <wtf/PassOwnPtr.h>
 
 using namespace WebCore;
 
 namespace WebKit {
 
-PassOwnPtr<RemoteLayerTreeController> RemoteLayerTreeController::create()
+PassOwnPtr<RemoteLayerTreeController> RemoteLayerTreeController::create(WebPage* webPage)
 {
-    return adoptPtr(new RemoteLayerTreeController);
+    return adoptPtr(new RemoteLayerTreeController(webPage));
 }
 
-RemoteLayerTreeController::RemoteLayerTreeController()
-    : m_layerFlushTimer(this, &RemoteLayerTreeController::layerFlushTimerFired)
+RemoteLayerTreeController::RemoteLayerTreeController(WebPage* webPage)
+    : m_webPage(webPage)
+    , m_layerFlushTimer(this, &RemoteLayerTreeController::layerFlushTimerFired)
 {
 }
 
@@ -47,6 +52,10 @@
 {
 }
 
+void RemoteLayerTreeController::setRootLayer(GraphicsLayer* rootLayer)
+{
+}
+
 void RemoteLayerTreeController::scheduleLayerFlush()
 {
     if (m_layerFlushTimer.isActive())
@@ -62,6 +71,14 @@
 
 void RemoteLayerTreeController::layerFlushTimerFired(WebCore::Timer<RemoteLayerTreeController>*)
 {
+    flushLayers();
+}
+
+void RemoteLayerTreeController::flushLayers()
+{
+    m_webPage->layoutIfNeeded();
+    m_webPage->corePage()->mainFrame()->view()->flushCompositingStateIncludingSubframes();
+
     // FIXME: Package up the transaction and send it to the UI process.
 }
 

Modified: trunk/Source/WebKit2/WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm (134277 => 134278)


--- trunk/Source/WebKit2/WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm	2012-11-12 20:08:27 UTC (rev 134277)
+++ trunk/Source/WebKit2/WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm	2012-11-12 20:14:48 UTC (rev 134278)
@@ -39,7 +39,7 @@
 
 RemoteLayerTreeDrawingArea::RemoteLayerTreeDrawingArea(WebPage* webPage, const WebPageCreationParameters&)
     : DrawingArea(DrawingAreaTypeRemoteLayerTree, webPage)
-    , m_remoteLayerTreeController(RemoteLayerTreeController::create())
+    , m_remoteLayerTreeController(RemoteLayerTreeController::create(webPage))
 {
 }
 
@@ -60,8 +60,9 @@
     return m_remoteLayerTreeController.get();
 }
 
-void RemoteLayerTreeDrawingArea::setRootCompositingLayer(GraphicsLayer*)
+void RemoteLayerTreeDrawingArea::setRootCompositingLayer(GraphicsLayer* rootLayer)
 {
+    m_remoteLayerTreeController->setRootLayer(rootLayer);
 }
 
 void RemoteLayerTreeDrawingArea::scheduleCompositingLayerFlush()
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to