Title: [90484] trunk/Source/WebCore
Revision
90484
Author
[email protected]
Date
2011-07-06 13:15:07 -0700 (Wed, 06 Jul 2011)

Log Message

2011-07-06  Simon Fraser  <[email protected]>

        Have RenderLayerCompositor take care of clearing backing store when entering the page cache
        https://bugs.webkit.org/show_bug.cgi?id=64018

        Reviewed by Joseph Pecoraro.

        Move responsibility for tearing down all RenderLayer backing stores from
        RenderLayer itself to RenderLayerCompositor, since RenderLayerCompositor
        manages backing store creation and destruction in general.

        * page/FrameView.cpp:
        (WebCore::FrameView::clearBackingStores):
        * rendering/RenderLayer.cpp:
        * rendering/RenderLayer.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::clearBackingForLayerIncludingDescendants):
        (WebCore::RenderLayerCompositor::clearBackingForAllLayers):
        * rendering/RenderLayerCompositor.h:

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (90483 => 90484)


--- trunk/Source/WebCore/ChangeLog	2011-07-06 19:52:20 UTC (rev 90483)
+++ trunk/Source/WebCore/ChangeLog	2011-07-06 20:15:07 UTC (rev 90484)
@@ -1,3 +1,23 @@
+2011-07-06  Simon Fraser  <[email protected]>
+
+        Have RenderLayerCompositor take care of clearing backing store when entering the page cache
+        https://bugs.webkit.org/show_bug.cgi?id=64018
+
+        Reviewed by Joseph Pecoraro.
+
+        Move responsibility for tearing down all RenderLayer backing stores from
+        RenderLayer itself to RenderLayerCompositor, since RenderLayerCompositor 
+        manages backing store creation and destruction in general.
+
+        * page/FrameView.cpp:
+        (WebCore::FrameView::clearBackingStores):
+        * rendering/RenderLayer.cpp:
+        * rendering/RenderLayer.h:
+        * rendering/RenderLayerCompositor.cpp:
+        (WebCore::RenderLayerCompositor::clearBackingForLayerIncludingDescendants):
+        (WebCore::RenderLayerCompositor::clearBackingForAllLayers):
+        * rendering/RenderLayerCompositor.h:
+
 2011-07-06  Ryuan Choi  <[email protected]>
 
         [Performance] Only call sendContentResizeNotification when the scrollbar actually did change

Modified: trunk/Source/WebCore/page/FrameView.cpp (90483 => 90484)


--- trunk/Source/WebCore/page/FrameView.cpp	2011-07-06 19:52:20 UTC (rev 90483)
+++ trunk/Source/WebCore/page/FrameView.cpp	2011-07-06 20:15:07 UTC (rev 90484)
@@ -640,7 +640,7 @@
     RenderLayerCompositor* compositor = root->compositor();
     ASSERT(compositor->inCompositingMode());
     compositor->enableCompositingMode(false);
-    root->layer()->clearBackingIncludingDescendants();
+    compositor->clearBackingForAllLayers();
 }
 
 void FrameView::restoreBackingStores()

Modified: trunk/Source/WebCore/rendering/RenderLayer.cpp (90483 => 90484)


--- trunk/Source/WebCore/rendering/RenderLayer.cpp	2011-07-06 19:52:20 UTC (rev 90483)
+++ trunk/Source/WebCore/rendering/RenderLayer.cpp	2011-07-06 20:15:07 UTC (rev 90484)
@@ -3657,14 +3657,6 @@
     m_backing.clear();
 }
 
-void RenderLayer::clearBackingIncludingDescendants()
-{
-    clearBacking();
-
-    for (RenderLayer* l = firstChild(); l; l = l->nextSibling())
-        l->clearBackingIncludingDescendants();
-}
-
 bool RenderLayer::hasCompositedMask() const
 {
     return m_backing && m_backing->hasMaskLayer();

Modified: trunk/Source/WebCore/rendering/RenderLayer.h (90483 => 90484)


--- trunk/Source/WebCore/rendering/RenderLayer.h	2011-07-06 19:52:20 UTC (rev 90483)
+++ trunk/Source/WebCore/rendering/RenderLayer.h	2011-07-06 20:15:07 UTC (rev 90484)
@@ -442,7 +442,6 @@
     RenderLayerBacking* backing() const { return m_backing.get(); }
     RenderLayerBacking* ensureBacking();
     void clearBacking();
-    void clearBackingIncludingDescendants();
     virtual GraphicsLayer* layerForHorizontalScrollbar() const;
     virtual GraphicsLayer* layerForVerticalScrollbar() const;
     virtual GraphicsLayer* layerForScrollCorner() const;

Modified: trunk/Source/WebCore/rendering/RenderLayerCompositor.cpp (90483 => 90484)


--- trunk/Source/WebCore/rendering/RenderLayerCompositor.cpp	2011-07-06 19:52:20 UTC (rev 90483)
+++ trunk/Source/WebCore/rendering/RenderLayerCompositor.cpp	2011-07-06 20:15:07 UTC (rev 90484)
@@ -1168,6 +1168,23 @@
     detachRootPlatformLayer();
 }
 
+void RenderLayerCompositor::clearBackingForLayerIncludingDescendants(RenderLayer* layer)
+{
+    if (!layer)
+        return;
+
+    if (layer->isComposited())
+        layer->clearBacking();
+    
+    for (RenderLayer* currLayer = layer->firstChild(); currLayer; currLayer = currLayer->nextSibling())
+        clearBackingForLayerIncludingDescendants(currLayer);
+}
+
+void RenderLayerCompositor::clearBackingForAllLayers()
+{
+    clearBackingForLayerIncludingDescendants(m_renderView->layer());
+}
+
 void RenderLayerCompositor::updateRootLayerPosition()
 {
     if (m_rootPlatformLayer) {

Modified: trunk/Source/WebCore/rendering/RenderLayerCompositor.h (90483 => 90484)


--- trunk/Source/WebCore/rendering/RenderLayerCompositor.h	2011-07-06 19:52:20 UTC (rev 90483)
+++ trunk/Source/WebCore/rendering/RenderLayerCompositor.h	2011-07-06 20:15:07 UTC (rev 90484)
@@ -147,6 +147,8 @@
     
     void didMoveOnscreen();
     void willMoveOffscreen();
+
+    void clearBackingForAllLayers();
     
     void didStartAcceleratedAnimation(CSSPropertyID);
     
@@ -209,6 +211,8 @@
     // Make or destroy the backing for this layer; returns true if backing changed.
     bool updateBacking(RenderLayer*, CompositingChangeRepaint shouldRepaint);
 
+    void clearBackingForLayerIncludingDescendants(RenderLayer*);
+
     // Repaint the given rect (which is layer's coords), and regions of child layers that intersect that rect.
     void recursiveRepaintLayerRect(RenderLayer* layer, const IntRect& rect);
 
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to