Changeset 75988 in webkit


Ignore:
Timestamp:
Jan 17, 2011 5:46:53 PM (13 years ago)
Author:
Adam Roben
Message:

Simplify WKCACFLayerRenderer's API

createRenderer/destroyRenderer are now hidden behind setHostWindow.
WKCACFLayerRendererClient::animationsStarted has been removed, as it
was never called. (The work it was supposed to do was already being
accomplished by WKCACFLayerRenderer::render telling each layer that
animations are starting.)

Fixes <http://webkit.org/b/52587> WKCACFLayerRenderer is hard to use

Reviewed by Chris Marrin.

Source/WebCore:

  • platform/graphics/win/MediaPlayerPrivateFullscreenWindow.cpp:

(WebCore::MediaPlayerPrivateFullscreenWindow::createWindow): Moved the
call to setHostWindow here from the WM_CREATE handler. The WM_CREATE
handler was causing the Direct3D device to be created, but MSDN says
you shouldn't create a device while handling WM_CREATE. Removed
no-longer-needed call to createRenderer (setHostWindow does this now)
and the never-needed call to setNeedsDisplay (we never draw into the
root layer; this was just creating an unnecessary backing store the
size of the screen!).
(WebCore::MediaPlayerPrivateFullscreenWindow::wndProc): Moved WM_CREATE
code, as described above. Removed call to destroyRenderer when handling
WM_DESTROY; setHostWindow does this now. Fixed up our WM_PAINT handler
to do a synchronous paint and to clear our dirty region, while I was in
here.

  • platform/graphics/win/WKCACFLayerRenderer.cpp:

(WebCore::WKCACFLayerRenderer::~WKCACFLayerRenderer): Changed to call
setHostWindow instead of destroyRenderer; the former calls the latter
if needed.
(WebCore::WKCACFLayerRenderer::setHostWindow): Moved here from the
header file. Destroys our old renderer (i.e., IDirect3DDevice9) if
we're losing our window, or creates a renderer if we're gaining a
window.
(WebCore::WKCACFLayerRenderer::createRenderer): Updated for WKSI function rename.
(WebCore::WKCACFLayerRenderer::destroyRenderer): Changed to clear the
D3D device from our context before releasing the device.

  • platform/graphics/win/WKCACFLayerRenderer.h: Removed

WKCACFLayerRendererClient::animationsStarted. Removed setNeedsDisplay.
Make createRenderer, destroyRenderer, and renderSoon private.

WebKit/win:

Update for WKCACFLayerRenderer changes

  • WebView.cpp:

(WebView::WebViewWndProc): Removed call to layerRendererBecameVisible
when handling WM_SHOWWINDOW. All this did was try to create the
renderer, but it had already been created in setAcceleratedCompositing,
so wasn't needed.
(WebView::setAcceleratedCompositing): Removed call to createRenderer;
setHostWindow does this for us now.

  • WebView.h: Removed animationsStarted and layerRendererBecameVisible.

WebKitLibraries:

Make it possible to both set and clear a wkCACFContext's D3D device

  • win/include/WebKitSystemInterface/WebKitSystemInterface.h:
  • win/lib/WebKitSystemInterface.lib:
Location:
trunk
Files:
10 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r75987 r75988  
     12011-01-17  Adam Roben  <aroben@apple.com>
     2
     3        Simplify WKCACFLayerRenderer's API
     4
     5        createRenderer/destroyRenderer are now hidden behind setHostWindow.
     6        WKCACFLayerRendererClient::animationsStarted has been removed, as it
     7        was never called. (The work it was supposed to do was already being
     8        accomplished by WKCACFLayerRenderer::render telling each layer that
     9        animations are starting.)
     10
     11        Fixes <http://webkit.org/b/52587> WKCACFLayerRenderer is hard to use
     12
     13        Reviewed by Chris Marrin.
     14
     15        * platform/graphics/win/MediaPlayerPrivateFullscreenWindow.cpp:
     16        (WebCore::MediaPlayerPrivateFullscreenWindow::createWindow): Moved the
     17        call to setHostWindow here from the WM_CREATE handler. The WM_CREATE
     18        handler was causing the Direct3D device to be created, but MSDN says
     19        you shouldn't create a device while handling WM_CREATE. Removed
     20        no-longer-needed call to createRenderer (setHostWindow does this now)
     21        and the never-needed call to setNeedsDisplay (we never draw into the
     22        root layer; this was just creating an unnecessary backing store the
     23        size of the screen!).
     24        (WebCore::MediaPlayerPrivateFullscreenWindow::wndProc): Moved WM_CREATE
     25        code, as described above. Removed call to destroyRenderer when handling
     26        WM_DESTROY; setHostWindow does this now. Fixed up our WM_PAINT handler
     27        to do a synchronous paint and to clear our dirty region, while I was in
     28        here.
     29
     30        * platform/graphics/win/WKCACFLayerRenderer.cpp:
     31        (WebCore::WKCACFLayerRenderer::~WKCACFLayerRenderer): Changed to call
     32        setHostWindow instead of destroyRenderer; the former calls the latter
     33        if needed.
     34        (WebCore::WKCACFLayerRenderer::setHostWindow): Moved here from the
     35        header file. Destroys our old renderer (i.e., IDirect3DDevice9) if
     36        we're losing our window, or creates a renderer if we're gaining a
     37        window.
     38        (WebCore::WKCACFLayerRenderer::createRenderer): Updated for WKSI function rename.
     39        (WebCore::WKCACFLayerRenderer::destroyRenderer): Changed to clear the
     40        D3D device from our context before releasing the device.
     41
     42        * platform/graphics/win/WKCACFLayerRenderer.h: Removed
     43        WKCACFLayerRendererClient::animationsStarted. Removed setNeedsDisplay.
     44        Make createRenderer, destroyRenderer, and renderSoon private.
     45
    1462011-01-17  Adam Roben  <aroben@apple.com>
    247
  • trunk/Source/WebCore/platform/graphics/win/MediaPlayerPrivateFullscreenWindow.cpp

    r75262 r75988  
    8181    ASSERT(IsWindow(m_hwnd));
    8282
     83#if USE(ACCELERATED_COMPOSITING)
     84    m_layerRenderer->setHostWindow(m_hwnd);
     85#endif
     86
    8387    ::SetFocus(m_hwnd);
    8488}
     
    140144    case WM_CREATE:
    141145        m_hwnd = hWnd;
    142 #if USE(ACCELERATED_COMPOSITING)
    143         m_layerRenderer->setHostWindow(m_hwnd);
    144         m_layerRenderer->createRenderer();
    145         if (m_rootChild)
    146             m_layerRenderer->setNeedsDisplay();
    147 #endif
    148146        break;
    149147    case WM_DESTROY:
    150148        m_hwnd = 0;
    151149#if USE(ACCELERATED_COMPOSITING)
    152         m_layerRenderer->destroyRenderer();
    153150        m_layerRenderer->setHostWindow(0);
    154151#endif
     
    170167    case WM_PAINT:
    171168#if USE(ACCELERATED_COMPOSITING)
    172         m_layerRenderer->renderSoon();
     169        m_layerRenderer->paint();
     170        ::ValidateRect(m_hwnd, 0);
    173171#endif
    174172        break;
  • trunk/Source/WebCore/platform/graphics/win/WKCACFLayerRenderer.cpp

    r75987 r75988  
    224224WKCACFLayerRenderer::~WKCACFLayerRenderer()
    225225{
    226     destroyRenderer();
     226    setHostWindow(0);
    227227    WKCACFContextFlusher::shared().removeContext(m_context);
    228228    wkCACFContextDestroy(m_context);
     229}
     230
     231void WKCACFLayerRenderer::setHostWindow(HWND window)
     232{
     233    if (window == m_hostWindow)
     234        return;
     235
     236    if (m_hostWindow)
     237        destroyRenderer();
     238
     239    m_hostWindow = window;
     240
     241    if (m_hostWindow)
     242        createRenderer();
    229243}
    230244
     
    251265    WKCACFContextFlusher::shared().addContext(m_context);
    252266    renderSoon();
    253 }
    254 
    255 void WKCACFLayerRenderer::setNeedsDisplay(bool sync)
    256 {
    257     ASSERT(m_rootLayer);
    258     m_rootLayer->setNeedsDisplay(0);
    259 
    260     if (sync)
    261         syncCompositingStateSoon();
    262     else
    263         renderSoon();
    264267}
    265268
     
    328331    initD3DGeometry();
    329332
    330     wkCACFContextInitializeD3DDevice(m_context, m_d3dDevice.get());
     333    wkCACFContextSetD3DDevice(m_context, m_d3dDevice.get());
    331334
    332335    if (IsWindow(m_hostWindow))
     
    340343    wkCACFContextSetLayer(m_context, m_rootLayer->platformLayer());
    341344
     345    wkCACFContextSetD3DDevice(m_context, 0);
    342346    m_d3dDevice = 0;
    343347    if (s_d3d)
  • trunk/Source/WebCore/platform/graphics/win/WKCACFLayerRenderer.h

    r75987 r75988  
    5555    virtual ~WKCACFLayerRendererClient() { }
    5656    virtual bool shouldRender() const = 0;
    57     virtual void animationsStarted(CFTimeInterval) { }
    5857    virtual void syncCompositingState() { }
    5958};
     
    7372    void setRootChildLayer(PlatformCALayer*);
    7473    void layerTreeDidChange();
    75     void setNeedsDisplay(bool sync = false);
    76     void setHostWindow(HWND window) { m_hostWindow = window; }
    77     bool createRenderer();
    78     void destroyRenderer();
     74    void setHostWindow(HWND);
    7975    void paint();
    8076    void resize();
    81     void renderSoon();
    8277    void syncCompositingStateSoon();
    8378
     
    8984    WKCACFLayerRenderer(WKCACFLayerRendererClient*);
    9085
     86    bool createRenderer();
     87    void destroyRenderer();
     88    void renderSoon();
    9189    void renderTimerFired(Timer<WKCACFLayerRenderer>*);
    9290
  • trunk/Source/WebKit/win/ChangeLog

    r75987 r75988  
     12011-01-17  Adam Roben  <aroben@apple.com>
     2
     3        Update for WKCACFLayerRenderer changes
     4
     5        Fixes <http://webkit.org/b/52587> WKCACFLayerRenderer is hard to use
     6
     7        Reviewed by Chris Marrin.
     8
     9        * WebView.cpp:
     10        (WebView::WebViewWndProc): Removed call to layerRendererBecameVisible
     11        when handling WM_SHOWWINDOW. All this did was try to create the
     12        renderer, but it had already been created in setAcceleratedCompositing,
     13        so wasn't needed.
     14        (WebView::setAcceleratedCompositing): Removed call to createRenderer;
     15        setHostWindow does this for us now.
     16
     17        * WebView.h: Removed animationsStarted and layerRendererBecameVisible.
     18
    1192011-01-17  Adam Roben  <aroben@apple.com>
    220
  • trunk/Source/WebKit/win/WebView.cpp

    r75987 r75988  
    21362136                webView->deleteBackingStore();
    21372137            }
    2138 #if USE(ACCELERATED_COMPOSITING)
    2139             else if (webView->isAcceleratedCompositing())
    2140                 webView->layerRendererBecameVisible();
    2141 #endif
    21422138            break;
    21432139        case WM_SETFOCUS: {
     
    62876283            ASSERT(m_viewWindow);
    62886284            m_layerRenderer->setHostWindow(m_viewWindow);
    6289             m_layerRenderer->createRenderer();
    62906285
    62916286            // FIXME: We could perhaps get better performance by never allowing this layer to
     
    63136308    }
    63146309}
    6315 
    6316 void WebView::layerRendererBecameVisible()
    6317 {
    6318     m_layerRenderer->createRenderer();
    6319 }
    63206310#endif
    63216311
     
    65146504
    65156505    return !frameView->layoutPending();
    6516 }
    6517 
    6518 void WebView::animationsStarted(CFTimeInterval t)
    6519 {
    6520     // Tell the animation controller that its animations have started
    6521     m_page->mainFrame()->animation()->notifyAnimationStarted(0, t);
    65226506}
    65236507
  • trunk/Source/WebKit/win/WebView.h

    r75987 r75988  
    950950    // WKCACFLayerRendererClient
    951951    virtual bool shouldRender() const;
    952     virtual void animationsStarted(CFTimeInterval);
    953952    virtual void syncCompositingState();
    954953#endif
     
    10571056    bool isAcceleratedCompositing() const { return m_isAcceleratedCompositing; }
    10581057    void setAcceleratedCompositing(bool);
    1059     void layerRendererBecameVisible();
    10601058
    10611059    OwnPtr<WebCore::WKCACFLayerRenderer> m_layerRenderer;
  • trunk/WebKitLibraries/ChangeLog

    r75280 r75988  
     12011-01-17  Adam Roben  <aroben@apple.com>
     2
     3        Make it possible to both set and clear a wkCACFContext's D3D device
     4
     5        Fixes <http://webkit.org/b/52587> WKCACFLayerRenderer is hard to use
     6
     7        Reviewed by Chris Marrin.
     8
     9        * win/include/WebKitSystemInterface/WebKitSystemInterface.h:
     10        * win/lib/WebKitSystemInterface.lib:
     11
    1122011-01-07  Chris Marrin  <cmarrin@apple.com>
    213
  • trunk/WebKitLibraries/win/include/WebKitSystemInterface/WebKitSystemInterface.h

    r75275 r75988  
    153153void* wkCACFLayerGetContextUserData(CACFLayerRef);
    154154
    155 void wkCACFContextInitializeD3DDevice(WKCACFContext*, IDirect3DDevice9*);
     155void wkCACFContextSetD3DDevice(WKCACFContext*, IDirect3DDevice9*);
    156156void wkCACFContextReleaseD3DResources(WKCACFContext*);
    157157
Note: See TracChangeset for help on using the changeset viewer.