Title: [162662] trunk/Source/WebKit2
Revision
162662
Author
timothy_hor...@apple.com
Date
2014-01-23 16:36:14 -0800 (Thu, 23 Jan 2014)

Log 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.

Modified Paths

Diff

Modified: trunk/Source/WebKit2/ChangeLog (162661 => 162662)


--- trunk/Source/WebKit2/ChangeLog	2014-01-24 00:36:08 UTC (rev 162661)
+++ trunk/Source/WebKit2/ChangeLog	2014-01-24 00:36:14 UTC (rev 162662)
@@ -1,3 +1,32 @@
+2014-01-23  Tim Horton  <timothy_hor...@apple.com>
+
+        [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.
+
 2014-01-23  Anders Carlsson  <ander...@apple.com>
 
         Explicitly link XPC services with AppKit

Modified: trunk/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundlePageOverlay.cpp (162661 => 162662)


--- trunk/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundlePageOverlay.cpp	2014-01-24 00:36:08 UTC (rev 162661)
+++ trunk/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundlePageOverlay.cpp	2014-01-24 00:36:14 UTC (rev 162662)
@@ -178,3 +178,8 @@
 
     return 1;
 }
+
+void WKBundlePageOverlayClear(WKBundlePageOverlayRef bundlePageOverlayRef)
+{
+    toImpl(bundlePageOverlayRef)->clear();
+}

Modified: trunk/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundlePageOverlay.h (162661 => 162662)


--- trunk/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundlePageOverlay.h	2014-01-24 00:36:08 UTC (rev 162661)
+++ trunk/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundlePageOverlay.h	2014-01-24 00:36:14 UTC (rev 162662)
@@ -114,6 +114,7 @@
 WK_EXPORT void WKBundlePageOverlaySetNeedsDisplay(WKBundlePageOverlayRef bundlePageOverlay, WKRect rect);
 WK_EXPORT float WKBundlePageOverlayFractionFadedIn(WKBundlePageOverlayRef bundlePageOverlay);
 WK_EXPORT void WKBundlePageOverlaySetAccessibilityClient(WKBundlePageOverlayRef bundlePageOverlay, WKBundlePageOverlayAccessibilityClientBase* client);
+WK_EXPORT void WKBundlePageOverlayClear(WKBundlePageOverlayRef bundlePageOverlay);
 
 #ifdef __cplusplus
 }

Modified: trunk/Source/WebKit2/WebProcess/WebPage/DrawingArea.h (162661 => 162662)


--- trunk/Source/WebKit2/WebProcess/WebPage/DrawingArea.h	2014-01-24 00:36:08 UTC (rev 162661)
+++ trunk/Source/WebKit2/WebProcess/WebPage/DrawingArea.h	2014-01-24 00:36:14 UTC (rev 162662)
@@ -82,6 +82,7 @@
     virtual void didUninstallPageOverlay(PageOverlay*) { }
     virtual void setPageOverlayNeedsDisplay(PageOverlay*, const WebCore::IntRect&) { }
     virtual void setPageOverlayOpacity(PageOverlay*, float) { }
+    virtual void clearPageOverlay(PageOverlay*) { }
 
     virtual void setPaintingEnabled(bool) { }
     virtual void updatePreferences(const WebPreferencesStore&) { }

Modified: trunk/Source/WebKit2/WebProcess/WebPage/PageOverlay.cpp (162661 => 162662)


--- trunk/Source/WebKit2/WebProcess/WebPage/PageOverlay.cpp	2014-01-24 00:36:08 UTC (rev 162661)
+++ trunk/Source/WebKit2/WebProcess/WebPage/PageOverlay.cpp	2014-01-24 00:36:14 UTC (rev 162662)
@@ -191,4 +191,9 @@
     }
 }
 
+void PageOverlay::clear()
+{
+    m_webPage->drawingArea()->clearPageOverlay(this);
+}
+
 } // namespace WebKit

Modified: trunk/Source/WebKit2/WebProcess/WebPage/PageOverlay.h (162661 => 162662)


--- trunk/Source/WebKit2/WebProcess/WebPage/PageOverlay.h	2014-01-24 00:36:08 UTC (rev 162661)
+++ trunk/Source/WebKit2/WebProcess/WebPage/PageOverlay.h	2014-01-24 00:36:14 UTC (rev 162662)
@@ -76,6 +76,8 @@
     void startFadeOutAnimation();
     void stopFadeOutAnimation();
 
+    void clear();
+
     Client* client() const { return m_client; }
     
 protected:

Modified: trunk/Source/WebKit2/WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h (162661 => 162662)


--- trunk/Source/WebKit2/WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h	2014-01-24 00:36:08 UTC (rev 162661)
+++ trunk/Source/WebKit2/WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h	2014-01-24 00:36:14 UTC (rev 162662)
@@ -64,6 +64,7 @@
     virtual void didUninstallPageOverlay(PageOverlay*) override;
     virtual void setPageOverlayNeedsDisplay(PageOverlay*, const WebCore::IntRect&) override;
     virtual void setPageOverlayOpacity(PageOverlay*, float) override;
+    virtual void clearPageOverlay(PageOverlay*) override;
     virtual bool supportsAsyncScrolling() override { return true; }
 
     virtual void setLayerTreeStateIsFrozen(bool) override;

Modified: trunk/Source/WebKit2/WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm (162661 => 162662)


--- trunk/Source/WebKit2/WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm	2014-01-24 00:36:08 UTC (rev 162661)
+++ trunk/Source/WebKit2/WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm	2014-01-24 00:36:14 UTC (rev 162662)
@@ -177,6 +177,18 @@
     scheduleCompositingLayerFlush();
 }
 
+void RemoteLayerTreeDrawingArea::clearPageOverlay(PageOverlay* pageOverlay)
+{
+    GraphicsLayer* layer = m_pageOverlayLayers.get(pageOverlay);
+
+    if (!layer)
+        return;
+
+    layer->setDrawsContent(false);
+    layer->setSize(IntSize());
+    scheduleCompositingLayerFlush();
+}
+
 void RemoteLayerTreeDrawingArea::paintContents(const GraphicsLayer* graphicsLayer, GraphicsContext& graphicsContext, GraphicsLayerPaintingPhase, const IntRect& clipRect)
 {
     for (const auto& overlayAndLayer : m_pageOverlayLayers) {

Modified: trunk/Source/WebKit2/WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h (162661 => 162662)


--- trunk/Source/WebKit2/WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h	2014-01-24 00:36:08 UTC (rev 162661)
+++ trunk/Source/WebKit2/WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h	2014-01-24 00:36:14 UTC (rev 162662)
@@ -74,6 +74,7 @@
     virtual void didUninstallPageOverlay(PageOverlay*) override;
     virtual void setPageOverlayNeedsDisplay(PageOverlay*, const WebCore::IntRect&) override;
     virtual void setPageOverlayOpacity(PageOverlay*, float) override;
+    virtual void clearPageOverlay(PageOverlay*) override;
     virtual void updatePreferences(const WebPreferencesStore&) override;
     virtual void mainFrameContentSizeChanged(const WebCore::IntSize&) override;
 

Modified: trunk/Source/WebKit2/WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm (162661 => 162662)


--- trunk/Source/WebKit2/WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm	2014-01-24 00:36:08 UTC (rev 162661)
+++ trunk/Source/WebKit2/WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm	2014-01-24 00:36:14 UTC (rev 162662)
@@ -239,6 +239,18 @@
     scheduleCompositingLayerFlush();
 }
 
+void TiledCoreAnimationDrawingArea::clearPageOverlay(PageOverlay* pageOverlay)
+{
+    GraphicsLayer* layer = m_pageOverlayLayers.get(pageOverlay);
+
+    if (!layer)
+        return;
+
+    layer->setDrawsContent(false);
+    layer->setSize(IntSize());
+    scheduleCompositingLayerFlush();
+}
+
 void TiledCoreAnimationDrawingArea::updatePreferences(const WebPreferencesStore&)
 {
     Settings& settings = m_webPage->corePage()->settings();
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to