Changeset 162662 in webkit


Ignore:
Timestamp:
Jan 23, 2014 4:36:14 PM (10 years ago)
Author:
timothy_horton@apple.com
Message:

[wk2] Page Overlays: Add API to clear the page overlay (and get rid of its backing store)
https://bugs.webkit.org/show_bug.cgi?id=127518

Reviewed by Anders Carlsson.

Add WKBundlePageOverlayClear, to allow clients of the page overlay API to
manually clear the page overlay's backing store, for memory, power, and performance gains.

  • WebProcess/InjectedBundle/API/c/WKBundlePageOverlay.cpp:

(WKBundlePageOverlayClear):

  • WebProcess/InjectedBundle/API/c/WKBundlePageOverlay.h:
  • WebProcess/WebPage/DrawingArea.h:

(WebKit::DrawingArea::clearPageOverlay):

  • WebProcess/WebPage/PageOverlay.cpp:

(WebKit::PageOverlay::clear):

  • WebProcess/WebPage/PageOverlay.h:

Add WKBundlePageOverlayClear and plumb it through PageOverlay to the DrawingArea.

  • WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h:
  • WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm:

(WebKit::RemoteLayerTreeDrawingArea::clearPageOverlay):

  • WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h:
  • WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:

(WebKit::TiledCoreAnimationDrawingArea::clearPageOverlay):
Set the layer to drawsContent=false and give it 0x0 size, effectively
removing its backing store.

Location:
trunk/Source/WebKit2
Files:
10 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit2/ChangeLog

    r162658 r162662  
     12014-01-23  Tim Horton  <timothy_horton@apple.com>
     2
     3        [wk2] Page Overlays: Add API to clear the page overlay (and get rid of its backing store)
     4        https://bugs.webkit.org/show_bug.cgi?id=127518
     5
     6        Reviewed by Anders Carlsson.
     7
     8        Add WKBundlePageOverlayClear, to allow clients of the page overlay API to
     9        manually clear the page overlay's backing store, for memory, power, and performance gains.
     10
     11        * WebProcess/InjectedBundle/API/c/WKBundlePageOverlay.cpp:
     12        (WKBundlePageOverlayClear):
     13        * WebProcess/InjectedBundle/API/c/WKBundlePageOverlay.h:
     14        * WebProcess/WebPage/DrawingArea.h:
     15        (WebKit::DrawingArea::clearPageOverlay):
     16        * WebProcess/WebPage/PageOverlay.cpp:
     17        (WebKit::PageOverlay::clear):
     18        * WebProcess/WebPage/PageOverlay.h:
     19        Add WKBundlePageOverlayClear and plumb it through PageOverlay to the DrawingArea.
     20
     21        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h:
     22        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm:
     23        (WebKit::RemoteLayerTreeDrawingArea::clearPageOverlay):
     24        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h:
     25        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
     26        (WebKit::TiledCoreAnimationDrawingArea::clearPageOverlay):
     27        Set the layer to drawsContent=false and give it 0x0 size, effectively
     28        removing its backing store.
     29
    1302014-01-23  Anders Carlsson  <andersca@apple.com>
    231
  • trunk/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundlePageOverlay.cpp

    r160104 r162662  
    179179    return 1;
    180180}
     181
     182void WKBundlePageOverlayClear(WKBundlePageOverlayRef bundlePageOverlayRef)
     183{
     184    toImpl(bundlePageOverlayRef)->clear();
     185}
  • trunk/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundlePageOverlay.h

    r160104 r162662  
    115115WK_EXPORT float WKBundlePageOverlayFractionFadedIn(WKBundlePageOverlayRef bundlePageOverlay);
    116116WK_EXPORT void WKBundlePageOverlaySetAccessibilityClient(WKBundlePageOverlayRef bundlePageOverlay, WKBundlePageOverlayAccessibilityClientBase* client);
     117WK_EXPORT void WKBundlePageOverlayClear(WKBundlePageOverlayRef bundlePageOverlay);
    117118
    118119#ifdef __cplusplus
  • trunk/Source/WebKit2/WebProcess/WebPage/DrawingArea.h

    r162276 r162662  
    8383    virtual void setPageOverlayNeedsDisplay(PageOverlay*, const WebCore::IntRect&) { }
    8484    virtual void setPageOverlayOpacity(PageOverlay*, float) { }
     85    virtual void clearPageOverlay(PageOverlay*) { }
    8586
    8687    virtual void setPaintingEnabled(bool) { }
  • trunk/Source/WebKit2/WebProcess/WebPage/PageOverlay.cpp

    r156543 r162662  
    192192}
    193193
     194void PageOverlay::clear()
     195{
     196    m_webPage->drawingArea()->clearPageOverlay(this);
     197}
     198
    194199} // namespace WebKit
  • trunk/Source/WebKit2/WebProcess/WebPage/PageOverlay.h

    r160384 r162662  
    7777    void stopFadeOutAnimation();
    7878
     79    void clear();
     80
    7981    Client* client() const { return m_client; }
    8082   
  • trunk/Source/WebKit2/WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h

    r162139 r162662  
    6565    virtual void setPageOverlayNeedsDisplay(PageOverlay*, const WebCore::IntRect&) override;
    6666    virtual void setPageOverlayOpacity(PageOverlay*, float) override;
     67    virtual void clearPageOverlay(PageOverlay*) override;
    6768    virtual bool supportsAsyncScrolling() override { return true; }
    6869
  • trunk/Source/WebKit2/WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm

    r161533 r162662  
    178178}
    179179
     180void RemoteLayerTreeDrawingArea::clearPageOverlay(PageOverlay* pageOverlay)
     181{
     182    GraphicsLayer* layer = m_pageOverlayLayers.get(pageOverlay);
     183
     184    if (!layer)
     185        return;
     186
     187    layer->setDrawsContent(false);
     188    layer->setSize(IntSize());
     189    scheduleCompositingLayerFlush();
     190}
     191
    180192void RemoteLayerTreeDrawingArea::paintContents(const GraphicsLayer* graphicsLayer, GraphicsContext& graphicsContext, GraphicsLayerPaintingPhase, const IntRect& clipRect)
    181193{
  • trunk/Source/WebKit2/WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h

    r162276 r162662  
    7575    virtual void setPageOverlayNeedsDisplay(PageOverlay*, const WebCore::IntRect&) override;
    7676    virtual void setPageOverlayOpacity(PageOverlay*, float) override;
     77    virtual void clearPageOverlay(PageOverlay*) override;
    7778    virtual void updatePreferences(const WebPreferencesStore&) override;
    7879    virtual void mainFrameContentSizeChanged(const WebCore::IntSize&) override;
  • trunk/Source/WebKit2/WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm

    r162505 r162662  
    240240}
    241241
     242void TiledCoreAnimationDrawingArea::clearPageOverlay(PageOverlay* pageOverlay)
     243{
     244    GraphicsLayer* layer = m_pageOverlayLayers.get(pageOverlay);
     245
     246    if (!layer)
     247        return;
     248
     249    layer->setDrawsContent(false);
     250    layer->setSize(IntSize());
     251    scheduleCompositingLayerFlush();
     252}
     253
    242254void TiledCoreAnimationDrawingArea::updatePreferences(const WebPreferencesStore&)
    243255{
Note: See TracChangeset for help on using the changeset viewer.