Changeset 76256 in webkit


Ignore:
Timestamp:
Jan 20, 2011 9:11:55 AM (13 years ago)
Author:
Adam Roben
Message:

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.
Location:
trunk/Source
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r76251 r76256  
     12011-01-19  Adam Roben  <aroben@apple.com>
     2
     3        Make WKCACFLayerRenderer ref-counted
     4
     5        This will be needed to handle cases where the client might release its reference to us while
     6        we're calling out to it.
     7
     8        WKCACFLayerRenderer now has a setClient function, which is used rather than passing the
     9        client to create(). This allows clients to null out the client pointer when they're done
     10        with the renderer.
     11
     12        Fixes <http://webkit.org/b/52749> WKCACFLayerRenderer should be
     13        ref-counted
     14
     15        Reviewed by Simon Fraser.
     16
     17        * platform/graphics/win/MediaPlayerPrivateFullscreenWindow.cpp:
     18        (WebCore::MediaPlayerPrivateFullscreenWindow::MediaPlayerPrivateFullscreenWindow):
     19        * platform/graphics/win/MediaPlayerPrivateFullscreenWindow.h:
     20        Updated for WKCACFLayerRenderer changes.
     21
     22        * platform/graphics/win/WKCACFLayerRenderer.cpp:
     23        (WebCore::WKCACFLayerRenderer::acceleratedCompositingAvailable): Updated for changes to
     24        create().
     25        (WebCore::WKCACFLayerRenderer::create): No longer takes a WKCACFLayerRendererClient. Now
     26        returns a PassOwnPtr.
     27        (WebCore::WKCACFLayerRenderer::WKCACFLayerRenderer): No longer takes a
     28        WKCACFLayerRendererClient.
     29
     30        * platform/graphics/win/WKCACFLayerRenderer.h: Made WKCACFLayerRenderer inherit from
     31        RefCounted.
     32        (WebCore::WKCACFLayerRenderer::setClient): Added this simple setter.
     33
    1342011-01-20  Csaba Osztrogonác  <ossy@webkit.org>
    235
  • trunk/Source/WebCore/platform/graphics/win/MediaPlayerPrivateFullscreenWindow.cpp

    r75988 r76256  
    4141    , m_hwnd(0)
    4242#if USE(ACCELERATED_COMPOSITING)
    43     , m_layerRenderer(WKCACFLayerRenderer::create(0))
     43    , m_layerRenderer(WKCACFLayerRenderer::create())
    4444#endif
    4545{
  • trunk/Source/WebCore/platform/graphics/win/MediaPlayerPrivateFullscreenWindow.h

    r75262 r76256  
    3131#include "WKCACFLayerRenderer.h"
    3232#endif
    33 #include <wtf/OwnPtr.h>
    3433
    3534typedef unsigned WPARAM;
     
    7271    MediaPlayerPrivateFullscreenClient* m_client;
    7372#if USE(ACCELERATED_COMPOSITING)
    74     OwnPtr<WKCACFLayerRenderer> m_layerRenderer;
     73    RefPtr<WKCACFLayerRenderer> m_layerRenderer;
    7574    RefPtr<PlatformCALayer> m_rootChild;
    7675#endif
  • trunk/Source/WebCore/platform/graphics/win/WKCACFLayerRenderer.cpp

    r75988 r76256  
    166166    }
    167167
    168     OwnPtr<WKCACFLayerRenderer> testLayerRenderer = WKCACFLayerRenderer::create(0);
     168    RefPtr<WKCACFLayerRenderer> testLayerRenderer = WKCACFLayerRenderer::create();
    169169    testLayerRenderer->setHostWindow(testWindow);
    170170    available = testLayerRenderer->createRenderer();
     
    174174}
    175175
    176 PassOwnPtr<WKCACFLayerRenderer> WKCACFLayerRenderer::create(WKCACFLayerRendererClient* client)
     176PassRefPtr<WKCACFLayerRenderer> WKCACFLayerRenderer::create()
    177177{
    178178    if (!acceleratedCompositingAvailable())
    179179        return 0;
    180     return new WKCACFLayerRenderer(client);
    181 }
    182 
    183 WKCACFLayerRenderer::WKCACFLayerRenderer(WKCACFLayerRendererClient* client)
    184     : m_client(client)
     180    return adoptRef(new WKCACFLayerRenderer());
     181}
     182
     183WKCACFLayerRenderer::WKCACFLayerRenderer()
     184    : m_client(0)
    185185    , m_mightBeAbleToCreateDeviceLater(true)
    186186    , m_rootLayer(PlatformCALayer::create(PlatformCALayer::LayerTypeRootLayer, 0))
  • trunk/Source/WebCore/platform/graphics/win/WKCACFLayerRenderer.h

    r76248 r76256  
    3333
    3434#include <wtf/HashSet.h>
    35 #include <wtf/Noncopyable.h>
    36 #include <wtf/PassOwnPtr.h>
    3735#include <wtf/PassRefPtr.h>
     36#include <wtf/RefCounted.h>
    3837#include <wtf/RefPtr.h>
    3938#include <wtf/RetainPtr.h>
     
    6160// has its own CARenderOGLContext and Direct3DDevice9, which is inefficient.
    6261// (https://bugs.webkit.org/show_bug.cgi?id=31855)
    63 class WKCACFLayerRenderer {
    64     WTF_MAKE_NONCOPYABLE(WKCACFLayerRenderer);
     62class WKCACFLayerRenderer : public RefCounted<WKCACFLayerRenderer> {
    6563    friend PlatformCALayer;
    6664
    6765public:
    68     static PassOwnPtr<WKCACFLayerRenderer> create(WKCACFLayerRendererClient*);
     66    static PassRefPtr<WKCACFLayerRenderer> create();
    6967    ~WKCACFLayerRenderer();
    7068
    7169    static bool acceleratedCompositingAvailable();
     70
     71    void setClient(WKCACFLayerRendererClient* client) { m_client = client; }
    7272
    7373    void setRootChildLayer(PlatformCALayer*);
     
    8383
    8484private:
    85     WKCACFLayerRenderer(WKCACFLayerRendererClient*);
     85    WKCACFLayerRenderer();
    8686
    8787    bool createRenderer();
  • trunk/Source/WebKit/win/ChangeLog

    r76254 r76256  
     12011-01-19  Adam Roben  <aroben@apple.com>
     2
     3        Update for WKCACFLayerRenderer changes
     4
     5        Fixes <http://webkit.org/b/52749> WKCACFLayerRenderer should be
     6        ref-counted
     7
     8        Reviewed by Simon Fraser.
     9
     10        * WebView.cpp:
     11        (WebView::~WebView): Added some assertions to make sure we've gotten rid of our
     12        compositing-related members. My biggest concern was making sure that m_layerRenderer was
     13        gone, which would also mean we had nulled out its client pointer.
     14        (WebView::setAcceleratedCompositing): Changed to call WKCACFLayerRenderer::setClient instead
     15        of passing the client into create(), and to clear out the client before nulling out
     16        m_layerRenderer.
     17
     18        * WebView.h: Changed m_layerRenderer from an OwnPtr to a RefPtr.
     19
    1202011-01-19  Adam Roben  <aroben@apple.com>
    221
  • trunk/Source/WebKit/win/WebView.cpp

    r76254 r76256  
    387387    ASSERT(!m_preferences);
    388388    ASSERT(!m_viewWindow);
     389
     390#if USE(ACCELERATED_COMPOSITING)
     391    ASSERT(!m_layerRenderer);
     392    ASSERT(!m_backingLayer);
     393#endif
    389394
    390395    WebViewCount--;
     
    62816286
    62826287    if (accelerated) {
    6283         m_layerRenderer = WKCACFLayerRenderer::create(this);
     6288        m_layerRenderer = WKCACFLayerRenderer::create();
    62846289        if (m_layerRenderer) {
    62856290            m_isAcceleratedCompositing = true;
    62866291
    6287             // Create the root layer
     6292            m_layerRenderer->setClient(this);
    62886293            ASSERT(m_viewWindow);
    62896294            m_layerRenderer->setHostWindow(m_viewWindow);
     
    63086313        }
    63096314    } else {
     6315        ASSERT(m_layerRenderer);
     6316        m_layerRenderer->setClient(0);
    63106317        m_layerRenderer = 0;
    63116318        m_backingLayer = 0;
  • trunk/Source/WebKit/win/WebView.h

    r75988 r76256  
    10571057    void setAcceleratedCompositing(bool);
    10581058
    1059     OwnPtr<WebCore::WKCACFLayerRenderer> m_layerRenderer;
     1059    RefPtr<WebCore::WKCACFLayerRenderer> m_layerRenderer;
    10601060    OwnPtr<WebCore::GraphicsLayer> m_backingLayer;
    10611061    bool m_isAcceleratedCompositing;
Note: See TracChangeset for help on using the changeset viewer.