Changeset 146058 in webkit


Ignore:
Timestamp:
Mar 18, 2013 6:05:16 AM (11 years ago)
Author:
anilsson@rim.com
Message:

[BlackBerry] Detach overlays from page when compositor is detached
https://bugs.webkit.org/show_bug.cgi?id=112424

Reviewed by Rob Buis.

PR 309160

Source/WebCore:

Expose a method to retrieve a compositing thread layer's client.

No change in behavior, no new tests.

  • platform/graphics/blackberry/LayerCompositingThread.h:

(WebCore::LayerCompositingThread::client):

Source/WebKit/blackberry:

If not detached properly, the overlays would have a dangling pointer to
the page.

  • Api/WebOverlay.cpp:

(BlackBerry::WebKit::WebOverlayLayerCompositingThreadClient::WebOverlayLayerCompositingThreadClient):
(BlackBerry::WebKit::WebOverlayLayerCompositingThreadClient::uploadTexturesIfNeeded):
(BlackBerry::WebKit::WebOverlayPrivateCompositingThread::WebOverlayPrivateCompositingThread):
(BlackBerry::WebKit::WebOverlayPrivateCompositingThread::~WebOverlayPrivateCompositingThread):

  • Api/WebOverlay_p.h:

(BlackBerry::WebKit::WebOverlayPrivate::setClient):
(WebOverlayLayerCompositingThreadClient):
(BlackBerry::WebKit::WebOverlayLayerCompositingThreadClient::overlay):
(BlackBerry::WebKit::WebOverlayLayerCompositingThreadClient::overlayDestroyed):
(WebOverlayPrivateCompositingThread):

  • Api/WebPageCompositor.cpp:

(BlackBerry::WebKit::WebPageCompositorPrivate::detach):
(BlackBerry::WebKit::WebPageCompositorPrivate::setPage):
(WebKit):
(BlackBerry::WebKit::WebPageCompositorPrivate::attachOverlays):

  • Api/WebPageCompositor_p.h:

(BlackBerry::WebKit::WebPageCompositorPrivate::attachOverlays):
(BlackBerry::WebKit::WebPageCompositorPrivate::detachOverlays):
(WebPageCompositorPrivate):

Location:
trunk/Source
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r146057 r146058  
     12013-03-18  Arvid Nilsson  <anilsson@rim.com>
     2
     3        [BlackBerry] Detach overlays from page when compositor is detached
     4        https://bugs.webkit.org/show_bug.cgi?id=112424
     5
     6        Reviewed by Rob Buis.
     7
     8        PR 309160
     9
     10        Expose a method to retrieve a compositing thread layer's client.
     11
     12        No change in behavior, no new tests.
     13
     14        * platform/graphics/blackberry/LayerCompositingThread.h:
     15        (WebCore::LayerCompositingThread::client):
     16
    1172013-03-18  Eugene Klyuchnikov  <eustas@chromium.org>
    218
  • trunk/Source/WebCore/platform/graphics/blackberry/LayerCompositingThread.h

    r145962 r146058  
    121121    static PassRefPtr<LayerCompositingThread> create(LayerType, LayerCompositingThreadClient*);
    122122
     123    LayerCompositingThreadClient* client() const { return m_client; }
    123124    void setClient(LayerCompositingThreadClient* client) { m_client = client; }
    124125
  • trunk/Source/WebKit/blackberry/Api/WebOverlay.cpp

    r145968 r146058  
    387387}
    388388
    389 WebOverlayLayerCompositingThreadClient::WebOverlayLayerCompositingThreadClient()
     389WebOverlayLayerCompositingThreadClient::WebOverlayLayerCompositingThreadClient(WebOverlayPrivate* overlay)
    390390    : m_drawsContent(false)
    391     , m_client(0)
     391    , m_overlay(overlay)
    392392{
    393393}
     
    451451
    452452    if (m_drawsContent) {
    453         if (!m_client || !m_owner)
     453        if (!m_overlay || !m_overlay->client)
    454454            return;
    455455
     
    467467        };
    468468        platformContext->setTransform(transform);
    469         m_client->drawOverlayContents(m_owner, platformContext);
     469        m_client->drawOverlayContents(m_overlay->q, platformContext);
    470470
    471471        releaseBufferDrawable(textureContents);
     
    526526
    527527WebOverlayPrivateCompositingThread::WebOverlayPrivateCompositingThread()
    528     : m_layerCompositingThreadClient(new WebOverlayLayerCompositingThreadClient)
     528    : m_layerCompositingThreadClient(new WebOverlayLayerCompositingThreadClient(this))
    529529{
    530530    m_layerCompositingThread = LayerCompositingThread::create(LayerData::CustomLayer, m_layerCompositingThreadClient);
     
    534534{
    535535    if (m_layerCompositingThreadClient)
    536         m_layerCompositingThreadClient->setClient(0, 0);
    537 }
    538 
    539 void WebOverlayPrivateCompositingThread::setClient(WebOverlayClient* client)
    540 {
    541     WebOverlayPrivate::setClient(client);
    542     if (m_layerCompositingThreadClient)
    543         m_layerCompositingThreadClient->setClient(q, client);
     536        m_layerCompositingThreadClient->overlayDestroyed();
    544537}
    545538
  • trunk/Source/WebKit/blackberry/Api/WebOverlay_p.h

    r145968 r146058  
    6666    void setPage(WebPagePrivate* page) { m_page = page; }
    6767
    68     virtual void setClient(WebOverlayClient* c) { client = c; }
     68    void setClient(WebOverlayClient* c) { client = c; }
    6969
    7070    WebOverlayOverride* override();
     
    181181class WebOverlayLayerCompositingThreadClient : public WebCore::LayerCompositingThreadClient {
    182182public:
    183     WebOverlayLayerCompositingThreadClient();
     183    WebOverlayLayerCompositingThreadClient(WebOverlayPrivate*);
    184184    virtual ~WebOverlayLayerCompositingThreadClient() { }
    185185
    186     void setClient(WebOverlay* owner, WebOverlayClient* client) { m_owner = owner; m_client = client; }
     186    WebOverlayPrivate* overlay() const { return m_overlay; }
     187    void overlayDestroyed() { m_overlay = 0; }
    187188
    188189    bool drawsContent() const { return m_drawsContent; }
     
    211212    BlackBerry::Platform::Graphics::TiledImage m_uploadedImage;
    212213    WebCore::Color m_color;
    213     WebOverlay* m_owner;
    214     WebOverlayClient* m_client;
     214    WebOverlayPrivate* m_overlay;
    215215};
    216216
     
    221221    ~WebOverlayPrivateCompositingThread();
    222222
    223     virtual void setClient(WebOverlayClient*);
    224 
    225223    virtual WebCore::FloatPoint position() const;
    226224    virtual void setPosition(const WebCore::FloatPoint&);
  • trunk/Source/WebKit/blackberry/Api/WebPageCompositor.cpp

    r145968 r146058  
    2727#include "BackingStore_p.h"
    2828#include "LayerWebKitThread.h"
     29#include "WebOverlay_p.h"
    2930#include "WebPage_p.h"
    3031
     
    6364    if (m_webPage)
    6465        Platform::AnimationFrameRateController::instance()->removeClient(this);
     66
    6567    m_webPage = 0;
     68    detachOverlays();
    6669}
    6770
     
    7376    ASSERT(m_webPage); // if this is null, we have a bug and we need to re-add.
    7477    m_webPage = p;
     78    attachOverlays();
     79}
     80
     81void WebPageCompositorPrivate::attachOverlays(LayerCompositingThread* overlayRoot, WebPagePrivate* page)
     82{
     83    if (!overlayRoot)
     84        return;
     85
     86    const Vector<RefPtr<LayerCompositingThread> >& overlays = overlayRoot->getSublayers();
     87    for (size_t i = 0; i < overlays.size(); ++i) {
     88        LayerCompositingThread* overlay = overlays[i].get();
     89        if (LayerCompositingThreadClient* client = overlay->client()) {
     90            if (WebOverlayPrivate* webOverlay = static_cast<WebOverlayLayerCompositingThreadClient*>(client)->overlay())
     91                webOverlay->setPage(page);
     92        }
     93    }
    7594}
    7695
  • trunk/Source/WebKit/blackberry/Api/WebPageCompositor_p.h

    r145953 r146058  
    110110private:
    111111    void compositeLayers(const WebCore::TransformationMatrix&);
     112    void attachOverlays() { attachOverlays(m_compositingThreadOverlayLayer.get(), m_webPage); }
     113    void detachOverlays() { attachOverlays(m_compositingThreadOverlayLayer.get(), 0); }
     114    static void attachOverlays(WebCore::LayerCompositingThread* overlayRoot, WebPagePrivate*);
    112115
    113116    // LayerRendererClient
  • trunk/Source/WebKit/blackberry/ChangeLog

    r146051 r146058  
     12013-03-18  Arvid Nilsson  <anilsson@rim.com>
     2
     3        [BlackBerry] Detach overlays from page when compositor is detached
     4        https://bugs.webkit.org/show_bug.cgi?id=112424
     5
     6        Reviewed by Rob Buis.
     7
     8        PR 309160
     9
     10        If not detached properly, the overlays would have a dangling pointer to
     11        the page.
     12
     13        * Api/WebOverlay.cpp:
     14        (BlackBerry::WebKit::WebOverlayLayerCompositingThreadClient::WebOverlayLayerCompositingThreadClient):
     15        (BlackBerry::WebKit::WebOverlayLayerCompositingThreadClient::uploadTexturesIfNeeded):
     16        (BlackBerry::WebKit::WebOverlayPrivateCompositingThread::WebOverlayPrivateCompositingThread):
     17        (BlackBerry::WebKit::WebOverlayPrivateCompositingThread::~WebOverlayPrivateCompositingThread):
     18        * Api/WebOverlay_p.h:
     19        (BlackBerry::WebKit::WebOverlayPrivate::setClient):
     20        (WebOverlayLayerCompositingThreadClient):
     21        (BlackBerry::WebKit::WebOverlayLayerCompositingThreadClient::overlay):
     22        (BlackBerry::WebKit::WebOverlayLayerCompositingThreadClient::overlayDestroyed):
     23        (WebOverlayPrivateCompositingThread):
     24        * Api/WebPageCompositor.cpp:
     25        (BlackBerry::WebKit::WebPageCompositorPrivate::detach):
     26        (BlackBerry::WebKit::WebPageCompositorPrivate::setPage):
     27        (WebKit):
     28        (BlackBerry::WebKit::WebPageCompositorPrivate::attachOverlays):
     29        * Api/WebPageCompositor_p.h:
     30        (BlackBerry::WebKit::WebPageCompositorPrivate::attachOverlays):
     31        (BlackBerry::WebKit::WebPageCompositorPrivate::detachOverlays):
     32        (WebPageCompositorPrivate):
     33
    1342013-03-18  Alberto Garcia  <agarcia@igalia.com>
    235
Note: See TracChangeset for help on using the changeset viewer.