[SCM] WebKit Debian packaging branch, webkit-1.3, updated. upstream/1.3.7-4207-g178b198

cmarrin at apple.com cmarrin at apple.com
Sun Feb 20 23:17:37 UTC 2011


The following commit has been merged in the webkit-1.3 branch:
commit 1ee1d9dd3eb7e4ede97d41cbfa47d31830871a6b
Author: cmarrin at apple.com <cmarrin at apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date:   Wed Jan 19 19:17:01 2011 +0000

    2011-01-19  Chris Marrin  <cmarrin at apple.com>
    
            Reviewed by Simon Fraser.
    
            WK2 - Multiple crashes in PlatformCALayer::replaceSublayer
            https://bugs.webkit.org/show_bug.cgi?id=52695
    
            Added a hostingLayer as the parent of the existing drawingLayer.
            The hostingLayer is now the root which is passed to the
            remote context. It never changes except to track the size
            of the window. The backingLayer is now a child of the
            hostingLayer, which allow it to switch between tiled and
            non-tiled.
    
            I also now give back accurate settings for debug borders and
            repaint counters.
    
            * WebProcess/WebPage/LayerBackedDrawingArea.cpp:
            (WebKit::LayerBackedDrawingArea::LayerBackedDrawingArea):
            (WebKit::LayerBackedDrawingArea::setSize):
            (WebKit::LayerBackedDrawingArea::showDebugBorders):
            (WebKit::LayerBackedDrawingArea::showRepaintCounter):
            * WebProcess/WebPage/LayerBackedDrawingArea.h:
            * WebProcess/WebPage/mac/LayerBackedDrawingAreaMac.mm:
            (WebKit::LayerBackedDrawingArea::platformInit):
            (WebKit::LayerBackedDrawingArea::attachCompositingContext):
            (WebKit::LayerBackedDrawingArea::syncCompositingLayers):
    
    2011-01-19  Chris Marrin  <cmarrin at apple.com>
    
            Reviewed by Simon Fraser.
    
            WK2 - Multiple crashes in PlatformCALayer::replaceSublayer
            https://bugs.webkit.org/show_bug.cgi?id=52695
    
            Added ASSERTs to the places we assume a non-null superlayer.
    
            * platform/graphics/ca/GraphicsLayerCA.cpp:
            (WebCore::GraphicsLayerCA::ensureStructuralLayer):
            (WebCore::GraphicsLayerCA::swapFromOrToTiledLayer):
    
    
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@76142 268f45cc-cd09-0410-ab3c-d52691b4dbfc

diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog
index 68ca15b..373667a 100644
--- a/Source/WebCore/ChangeLog
+++ b/Source/WebCore/ChangeLog
@@ -1,3 +1,16 @@
+2011-01-19  Chris Marrin  <cmarrin at apple.com>
+
+        Reviewed by Simon Fraser.
+
+        WK2 - Multiple crashes in PlatformCALayer::replaceSublayer
+        https://bugs.webkit.org/show_bug.cgi?id=52695
+
+        Added ASSERTs to the places we assume a non-null superlayer.
+
+        * platform/graphics/ca/GraphicsLayerCA.cpp:
+        (WebCore::GraphicsLayerCA::ensureStructuralLayer):
+        (WebCore::GraphicsLayerCA::swapFromOrToTiledLayer):
+
 2011-01-18  Beth Dakin  <bdakin at apple.com>
 
         Reviewed by Maciej Stachowiak.
diff --git a/Source/WebCore/platform/graphics/ca/GraphicsLayerCA.cpp b/Source/WebCore/platform/graphics/ca/GraphicsLayerCA.cpp
index b72d761..01e25e9 100644
--- a/Source/WebCore/platform/graphics/ca/GraphicsLayerCA.cpp
+++ b/Source/WebCore/platform/graphics/ca/GraphicsLayerCA.cpp
@@ -1105,6 +1105,10 @@ void GraphicsLayerCA::ensureStructuralLayer(StructuralLayerPurpose purpose)
         if (m_structuralLayer) {
             // Replace the transformLayer in the parent with this layer.
             m_layer->removeFromSuperlayer();
+ 
+            // If m_layer doesn't have a parent, it means it's the root layer and
+            // is likely hosted by something that is not expecting to be changed
+            ASSERT(m_structuralLayer->superlayer());
             m_structuralLayer->superlayer()->replaceSublayer(m_structuralLayer.get(), m_layer.get());
 
             moveOrCopyAnimationsForProperty(Move, AnimatedPropertyWebkitTransform, m_structuralLayer.get(), m_layer.get());
@@ -1178,6 +1182,9 @@ void GraphicsLayerCA::ensureStructuralLayer(StructuralLayerPurpose purpose)
     }
 
     // Move this layer to be a child of the transform layer.
+    // If m_layer doesn't have a parent, it means it's the root layer and
+    // is likely hosted by something that is not expecting to be changed
+    ASSERT(m_layer->superlayer());
     m_layer->superlayer()->replaceSublayer(m_layer.get(), m_structuralLayer.get());
     m_structuralLayer->appendSublayer(m_layer.get());
 
@@ -2013,6 +2020,9 @@ void GraphicsLayerCA::swapFromOrToTiledLayer(bool useTiledLayer)
 
     m_layer->adoptSublayers(oldLayer.get());
     
+    // If m_layer doesn't have a parent, it means it's the root layer and
+    // is likely hosted by something that is not expecting to be changed
+    ASSERT(oldLayer->superlayer());
     oldLayer->superlayer()->replaceSublayer(oldLayer.get(), m_layer.get());
 
     updateContentsTransform();
diff --git a/Source/WebKit2/ChangeLog b/Source/WebKit2/ChangeLog
index e0fa59e..b741dd9 100644
--- a/Source/WebKit2/ChangeLog
+++ b/Source/WebKit2/ChangeLog
@@ -1,3 +1,31 @@
+2011-01-19  Chris Marrin  <cmarrin at apple.com>
+
+        Reviewed by Simon Fraser.
+
+        WK2 - Multiple crashes in PlatformCALayer::replaceSublayer
+        https://bugs.webkit.org/show_bug.cgi?id=52695
+
+        Added a hostingLayer as the parent of the existing drawingLayer.
+        The hostingLayer is now the root which is passed to the 
+        remote context. It never changes except to track the size
+        of the window. The backingLayer is now a child of the 
+        hostingLayer, which allow it to switch between tiled and
+        non-tiled.
+
+        I also now give back accurate settings for debug borders and
+        repaint counters.
+
+        * WebProcess/WebPage/LayerBackedDrawingArea.cpp:
+        (WebKit::LayerBackedDrawingArea::LayerBackedDrawingArea):
+        (WebKit::LayerBackedDrawingArea::setSize):
+        (WebKit::LayerBackedDrawingArea::showDebugBorders):
+        (WebKit::LayerBackedDrawingArea::showRepaintCounter):
+        * WebProcess/WebPage/LayerBackedDrawingArea.h:
+        * WebProcess/WebPage/mac/LayerBackedDrawingAreaMac.mm:
+        (WebKit::LayerBackedDrawingArea::platformInit):
+        (WebKit::LayerBackedDrawingArea::attachCompositingContext):
+        (WebKit::LayerBackedDrawingArea::syncCompositingLayers):
+
 2011-01-19  Anders Carlsson  <andersca at apple.com>
 
         Reviewed by Darin Adler.
diff --git a/Source/WebKit2/WebProcess/WebPage/LayerBackedDrawingArea.cpp b/Source/WebKit2/WebProcess/WebPage/LayerBackedDrawingArea.cpp
index 3c46c5a..b104b29 100644
--- a/Source/WebKit2/WebProcess/WebPage/LayerBackedDrawingArea.cpp
+++ b/Source/WebKit2/WebProcess/WebPage/LayerBackedDrawingArea.cpp
@@ -34,6 +34,8 @@
 #include "WebPage.h"
 #include "WebProcess.h"
 #include <WebCore/GraphicsLayer.h>
+#include <WebCore/Page.h>
+#include <WebCore/Settings.h>
 
 using namespace WebCore;
 
@@ -45,6 +47,12 @@ LayerBackedDrawingArea::LayerBackedDrawingArea(DrawingAreaInfo::Identifier ident
     , m_attached(false)
     , m_shouldPaint(true)
 {
+    m_hostingLayer = GraphicsLayer::create(this);
+    m_hostingLayer->setDrawsContent(false);
+#ifndef NDEBUG
+    m_hostingLayer->setName("DrawingArea hosting layer");
+#endif
+    m_hostingLayer->setSize(webPage->size());
     m_backingLayer = GraphicsLayer::create(this);
     m_backingLayer->setDrawsContent(true);
     m_backingLayer->setContentsOpaque(webPage->drawsBackground() && !webPage->drawsTransparentBackground());
@@ -53,6 +61,7 @@ LayerBackedDrawingArea::LayerBackedDrawingArea(DrawingAreaInfo::Identifier ident
     m_backingLayer->setName("DrawingArea backing layer");
 #endif
     m_backingLayer->setSize(webPage->size());
+    m_hostingLayer->addChild(m_backingLayer.get());
     platformInit();
 }
 
@@ -99,6 +108,7 @@ void LayerBackedDrawingArea::setSize(const IntSize& viewSize)
     ASSERT(m_shouldPaint);
     ASSERT_ARG(viewSize, !viewSize.isEmpty());
 
+    m_hostingLayer->setSize(viewSize);
     m_backingLayer->setSize(viewSize);
     scheduleCompositingLayerSync();
 
@@ -183,14 +193,12 @@ void LayerBackedDrawingArea::paintContents(const GraphicsLayer*, GraphicsContext
 
 bool LayerBackedDrawingArea::showDebugBorders() const
 {
-    // FIXME: get from settings;
-    return false;
+    return m_webPage->corePage()->settings()->showDebugBorders();
 }
 
 bool LayerBackedDrawingArea::showRepaintCounter() const
 {
-    // FIXME: get from settings;
-    return false;
+    return m_webPage->corePage()->settings()->showRepaintCounter();
 }
 
 #if !PLATFORM(MAC) && !PLATFORM(WIN)
diff --git a/Source/WebKit2/WebProcess/WebPage/LayerBackedDrawingArea.h b/Source/WebKit2/WebProcess/WebPage/LayerBackedDrawingArea.h
index 81acfd2..ed05cc7 100644
--- a/Source/WebKit2/WebProcess/WebPage/LayerBackedDrawingArea.h
+++ b/Source/WebKit2/WebProcess/WebPage/LayerBackedDrawingArea.h
@@ -106,6 +106,7 @@ private:
 
     RunLoop::Timer<LayerBackedDrawingArea> m_syncTimer;
 
+    OwnPtr<WebCore::GraphicsLayer> m_hostingLayer;
     OwnPtr<WebCore::GraphicsLayer> m_backingLayer;
 #if PLATFORM(MAC)
 #if HAVE(HOSTED_CORE_ANIMATION)
diff --git a/Source/WebKit2/WebProcess/WebPage/mac/LayerBackedDrawingAreaMac.mm b/Source/WebKit2/WebProcess/WebPage/mac/LayerBackedDrawingAreaMac.mm
index f8b7e71..4375980 100644
--- a/Source/WebKit2/WebProcess/WebPage/mac/LayerBackedDrawingAreaMac.mm
+++ b/Source/WebKit2/WebProcess/WebPage/mac/LayerBackedDrawingAreaMac.mm
@@ -44,7 +44,7 @@ void LayerBackedDrawingArea::platformInit()
 {
     setUpUpdateLayoutRunLoopObserver();
 
-    [m_backingLayer->platformLayer() setGeometryFlipped:YES];
+    [m_hostingLayer->platformLayer() setGeometryFlipped:YES];
 #if HAVE(HOSTED_CORE_ANIMATION)
     attachCompositingContext();
 #endif
@@ -80,7 +80,7 @@ void LayerBackedDrawingArea::attachCompositingContext()
 #if HAVE(HOSTED_CORE_ANIMATION)
     mach_port_t serverPort = WebProcess::shared().compositingRenderServerPort();
     m_remoteLayerRef = WKCARemoteLayerClientMakeWithServerPort(serverPort);
-    WKCARemoteLayerClientSetLayer(m_remoteLayerRef.get(), m_backingLayer->platformLayer());
+    WKCARemoteLayerClientSetLayer(m_remoteLayerRef.get(), m_hostingLayer->platformLayer());
     
     uint32_t contextID = WKCARemoteLayerClientGetClientId(m_remoteLayerRef.get());
     WebProcess::shared().connection()->sendSync(DrawingAreaProxyLegacyMessage::AttachCompositingContext, m_webPage->pageID(), CoreIPC::In(contextID), CoreIPC::Out());
@@ -115,6 +115,7 @@ void LayerBackedDrawingArea::scheduleCompositingLayerSync()
 
 void LayerBackedDrawingArea::syncCompositingLayers()
 {
+    m_hostingLayer->syncCompositingStateForThisLayerOnly();
     m_backingLayer->syncCompositingStateForThisLayerOnly();
 
     bool didSync = m_webPage->corePage()->mainFrame()->view()->syncCompositingStateRecursive();

-- 
WebKit Debian packaging



More information about the Pkg-webkit-commits mailing list