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

aroben at apple.com aroben at apple.com
Sun Feb 20 23:27:35 UTC 2011


The following commit has been merged in the webkit-1.3 branch:
commit a60ce7147a7607af1da29b5ab021dbeebef4f688
Author: aroben at apple.com <aroben at apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date:   Thu Jan 20 17:11:55 2011 +0000

    Make WKCACFLayerRenderer ref-counted
    
    This will be needed to handle cases where the client might release its reference to us while
    we're calling out to it.
    
    WKCACFLayerRenderer now has a setClient function, which is used rather than passing the
    client to create(). This allows clients to null out the client pointer when they're done
    with the renderer.
    
    Fixes <http://webkit.org/b/52749> WKCACFLayerRenderer should be
    ref-counted
    
    Reviewed by Simon Fraser.
    
    Source/WebCore:
    
    * platform/graphics/win/MediaPlayerPrivateFullscreenWindow.cpp:
    (WebCore::MediaPlayerPrivateFullscreenWindow::MediaPlayerPrivateFullscreenWindow):
    * platform/graphics/win/MediaPlayerPrivateFullscreenWindow.h:
    Updated for WKCACFLayerRenderer changes.
    
    * platform/graphics/win/WKCACFLayerRenderer.cpp:
    (WebCore::WKCACFLayerRenderer::acceleratedCompositingAvailable): Updated for changes to
    create().
    (WebCore::WKCACFLayerRenderer::create): No longer takes a WKCACFLayerRendererClient. Now
    returns a PassOwnPtr.
    (WebCore::WKCACFLayerRenderer::WKCACFLayerRenderer): No longer takes a
    WKCACFLayerRendererClient.
    
    * platform/graphics/win/WKCACFLayerRenderer.h: Made WKCACFLayerRenderer inherit from
    RefCounted.
    (WebCore::WKCACFLayerRenderer::setClient): Added this simple setter.
    
    Source/WebKit/win:
    
    Update for WKCACFLayerRenderer changes
    
    * WebView.cpp:
    (WebView::~WebView): Added some assertions to make sure we've gotten rid of our
    compositing-related members. My biggest concern was making sure that m_layerRenderer was
    gone, which would also mean we had nulled out its client pointer.
    (WebView::setAcceleratedCompositing): Changed to call WKCACFLayerRenderer::setClient instead
    of passing the client into create(), and to clear out the client before nulling out
    m_layerRenderer.
    
    * WebView.h: Changed m_layerRenderer from an OwnPtr to a RefPtr.
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@76256 268f45cc-cd09-0410-ab3c-d52691b4dbfc

diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog
index e758696..e2d6826 100644
--- a/Source/WebCore/ChangeLog
+++ b/Source/WebCore/ChangeLog
@@ -1,3 +1,36 @@
+2011-01-19  Adam Roben  <aroben at apple.com>
+
+        Make WKCACFLayerRenderer ref-counted
+
+        This will be needed to handle cases where the client might release its reference to us while
+        we're calling out to it.
+
+        WKCACFLayerRenderer now has a setClient function, which is used rather than passing the
+        client to create(). This allows clients to null out the client pointer when they're done
+        with the renderer.
+
+        Fixes <http://webkit.org/b/52749> WKCACFLayerRenderer should be
+        ref-counted
+
+        Reviewed by Simon Fraser.
+
+        * platform/graphics/win/MediaPlayerPrivateFullscreenWindow.cpp:
+        (WebCore::MediaPlayerPrivateFullscreenWindow::MediaPlayerPrivateFullscreenWindow):
+        * platform/graphics/win/MediaPlayerPrivateFullscreenWindow.h:
+        Updated for WKCACFLayerRenderer changes.
+
+        * platform/graphics/win/WKCACFLayerRenderer.cpp:
+        (WebCore::WKCACFLayerRenderer::acceleratedCompositingAvailable): Updated for changes to
+        create().
+        (WebCore::WKCACFLayerRenderer::create): No longer takes a WKCACFLayerRendererClient. Now
+        returns a PassOwnPtr.
+        (WebCore::WKCACFLayerRenderer::WKCACFLayerRenderer): No longer takes a
+        WKCACFLayerRendererClient.
+
+        * platform/graphics/win/WKCACFLayerRenderer.h: Made WKCACFLayerRenderer inherit from
+        RefCounted.
+        (WebCore::WKCACFLayerRenderer::setClient): Added this simple setter.
+
 2011-01-20  Csaba Osztrogonác  <ossy at webkit.org>
 
         [Qt][V8] Unreviewed buildfix after r76248.
diff --git a/Source/WebCore/platform/graphics/win/MediaPlayerPrivateFullscreenWindow.cpp b/Source/WebCore/platform/graphics/win/MediaPlayerPrivateFullscreenWindow.cpp
index 7abe2eb..6f28860 100644
--- a/Source/WebCore/platform/graphics/win/MediaPlayerPrivateFullscreenWindow.cpp
+++ b/Source/WebCore/platform/graphics/win/MediaPlayerPrivateFullscreenWindow.cpp
@@ -40,7 +40,7 @@ MediaPlayerPrivateFullscreenWindow::MediaPlayerPrivateFullscreenWindow(MediaPlay
     : m_client(client)
     , m_hwnd(0)
 #if USE(ACCELERATED_COMPOSITING)
-    , m_layerRenderer(WKCACFLayerRenderer::create(0))
+    , m_layerRenderer(WKCACFLayerRenderer::create())
 #endif
 {
 }
diff --git a/Source/WebCore/platform/graphics/win/MediaPlayerPrivateFullscreenWindow.h b/Source/WebCore/platform/graphics/win/MediaPlayerPrivateFullscreenWindow.h
index a18f0cc..4619f2a 100644
--- a/Source/WebCore/platform/graphics/win/MediaPlayerPrivateFullscreenWindow.h
+++ b/Source/WebCore/platform/graphics/win/MediaPlayerPrivateFullscreenWindow.h
@@ -30,7 +30,6 @@
 #include "PlatformCALayer.h"
 #include "WKCACFLayerRenderer.h"
 #endif
-#include <wtf/OwnPtr.h>
 
 typedef unsigned WPARAM;
 typedef long LPARAM;
@@ -71,7 +70,7 @@ private:
 
     MediaPlayerPrivateFullscreenClient* m_client;
 #if USE(ACCELERATED_COMPOSITING)
-    OwnPtr<WKCACFLayerRenderer> m_layerRenderer;
+    RefPtr<WKCACFLayerRenderer> m_layerRenderer;
     RefPtr<PlatformCALayer> m_rootChild;
 #endif
     HWND m_hwnd;
diff --git a/Source/WebCore/platform/graphics/win/WKCACFLayerRenderer.cpp b/Source/WebCore/platform/graphics/win/WKCACFLayerRenderer.cpp
index 7c83f86..b5ef6de 100644
--- a/Source/WebCore/platform/graphics/win/WKCACFLayerRenderer.cpp
+++ b/Source/WebCore/platform/graphics/win/WKCACFLayerRenderer.cpp
@@ -165,7 +165,7 @@ bool WKCACFLayerRenderer::acceleratedCompositingAvailable()
         return available;
     }
 
-    OwnPtr<WKCACFLayerRenderer> testLayerRenderer = WKCACFLayerRenderer::create(0);
+    RefPtr<WKCACFLayerRenderer> testLayerRenderer = WKCACFLayerRenderer::create();
     testLayerRenderer->setHostWindow(testWindow);
     available = testLayerRenderer->createRenderer();
     ::DestroyWindow(testWindow);
@@ -173,15 +173,15 @@ bool WKCACFLayerRenderer::acceleratedCompositingAvailable()
     return available;
 }
 
-PassOwnPtr<WKCACFLayerRenderer> WKCACFLayerRenderer::create(WKCACFLayerRendererClient* client)
+PassRefPtr<WKCACFLayerRenderer> WKCACFLayerRenderer::create()
 {
     if (!acceleratedCompositingAvailable())
         return 0;
-    return new WKCACFLayerRenderer(client);
+    return adoptRef(new WKCACFLayerRenderer());
 }
 
-WKCACFLayerRenderer::WKCACFLayerRenderer(WKCACFLayerRendererClient* client)
-    : m_client(client)
+WKCACFLayerRenderer::WKCACFLayerRenderer()
+    : m_client(0)
     , m_mightBeAbleToCreateDeviceLater(true)
     , m_rootLayer(PlatformCALayer::create(PlatformCALayer::LayerTypeRootLayer, 0))
     , m_context(wkCACFContextCreate())
diff --git a/Source/WebCore/platform/graphics/win/WKCACFLayerRenderer.h b/Source/WebCore/platform/graphics/win/WKCACFLayerRenderer.h
index cc9dfcd..5308625 100644
--- a/Source/WebCore/platform/graphics/win/WKCACFLayerRenderer.h
+++ b/Source/WebCore/platform/graphics/win/WKCACFLayerRenderer.h
@@ -32,9 +32,8 @@
 #include "Timer.h"
 
 #include <wtf/HashSet.h>
-#include <wtf/Noncopyable.h>
-#include <wtf/PassOwnPtr.h>
 #include <wtf/PassRefPtr.h>
+#include <wtf/RefCounted.h>
 #include <wtf/RefPtr.h>
 #include <wtf/RetainPtr.h>
 #include <wtf/Vector.h>
@@ -60,16 +59,17 @@ public:
 // FIXME: Currently there is a WKCACFLayerRenderer for each WebView and each
 // has its own CARenderOGLContext and Direct3DDevice9, which is inefficient.
 // (https://bugs.webkit.org/show_bug.cgi?id=31855)
-class WKCACFLayerRenderer {
-    WTF_MAKE_NONCOPYABLE(WKCACFLayerRenderer);
+class WKCACFLayerRenderer : public RefCounted<WKCACFLayerRenderer> {
     friend PlatformCALayer;
 
 public:
-    static PassOwnPtr<WKCACFLayerRenderer> create(WKCACFLayerRendererClient*);
+    static PassRefPtr<WKCACFLayerRenderer> create();
     ~WKCACFLayerRenderer();
 
     static bool acceleratedCompositingAvailable();
 
+    void setClient(WKCACFLayerRendererClient* client) { m_client = client; }
+
     void setRootChildLayer(PlatformCALayer*);
     void layerTreeDidChange();
     void setHostWindow(HWND);
@@ -82,7 +82,7 @@ protected:
     void addPendingAnimatedLayer(PassRefPtr<PlatformCALayer>);
 
 private:
-    WKCACFLayerRenderer(WKCACFLayerRendererClient*);
+    WKCACFLayerRenderer();
 
     bool createRenderer();
     void destroyRenderer();
diff --git a/Source/WebKit/win/ChangeLog b/Source/WebKit/win/ChangeLog
index 54eac82..8f32e77 100644
--- a/Source/WebKit/win/ChangeLog
+++ b/Source/WebKit/win/ChangeLog
@@ -1,5 +1,24 @@
 2011-01-19  Adam Roben  <aroben at apple.com>
 
+        Update for WKCACFLayerRenderer changes
+
+        Fixes <http://webkit.org/b/52749> WKCACFLayerRenderer should be
+        ref-counted
+
+        Reviewed by Simon Fraser.
+
+        * WebView.cpp:
+        (WebView::~WebView): Added some assertions to make sure we've gotten rid of our
+        compositing-related members. My biggest concern was making sure that m_layerRenderer was
+        gone, which would also mean we had nulled out its client pointer.
+        (WebView::setAcceleratedCompositing): Changed to call WKCACFLayerRenderer::setClient instead
+        of passing the client into create(), and to clear out the client before nulling out
+        m_layerRenderer.
+
+        * WebView.h: Changed m_layerRenderer from an OwnPtr to a RefPtr.
+
+2011-01-19  Adam Roben  <aroben at apple.com>
+
         Teach WebView::scrollBackingStore about compositing mode
 
         Test:
diff --git a/Source/WebKit/win/WebView.cpp b/Source/WebKit/win/WebView.cpp
index bf89ec9..9dfff83 100644
--- a/Source/WebKit/win/WebView.cpp
+++ b/Source/WebKit/win/WebView.cpp
@@ -387,6 +387,11 @@ WebView::~WebView()
     ASSERT(!m_preferences);
     ASSERT(!m_viewWindow);
 
+#if USE(ACCELERATED_COMPOSITING)
+    ASSERT(!m_layerRenderer);
+    ASSERT(!m_backingLayer);
+#endif
+
     WebViewCount--;
     gClassCount--;
     gClassNameCount.remove("WebView");
@@ -6280,11 +6285,11 @@ void WebView::setAcceleratedCompositing(bool accelerated)
         return;
 
     if (accelerated) {
-        m_layerRenderer = WKCACFLayerRenderer::create(this);
+        m_layerRenderer = WKCACFLayerRenderer::create();
         if (m_layerRenderer) {
             m_isAcceleratedCompositing = true;
 
-            // Create the root layer
+            m_layerRenderer->setClient(this);
             ASSERT(m_viewWindow);
             m_layerRenderer->setHostWindow(m_viewWindow);
 
@@ -6307,6 +6312,8 @@ void WebView::setAcceleratedCompositing(bool accelerated)
             deleteBackingStoreSoon();
         }
     } else {
+        ASSERT(m_layerRenderer);
+        m_layerRenderer->setClient(0);
         m_layerRenderer = 0;
         m_backingLayer = 0;
         m_isAcceleratedCompositing = false;
diff --git a/Source/WebKit/win/WebView.h b/Source/WebKit/win/WebView.h
index f775eaf..19433c2 100644
--- a/Source/WebKit/win/WebView.h
+++ b/Source/WebKit/win/WebView.h
@@ -1056,7 +1056,7 @@ protected:
     bool isAcceleratedCompositing() const { return m_isAcceleratedCompositing; }
     void setAcceleratedCompositing(bool);
 
-    OwnPtr<WebCore::WKCACFLayerRenderer> m_layerRenderer;
+    RefPtr<WebCore::WKCACFLayerRenderer> m_layerRenderer;
     OwnPtr<WebCore::GraphicsLayer> m_backingLayer;
     bool m_isAcceleratedCompositing;
 #endif

-- 
WebKit Debian packaging



More information about the Pkg-webkit-commits mailing list