Title: [111593] trunk/Source/WebCore
Revision
111593
Author
[email protected]
Date
2012-03-21 12:24:24 -0700 (Wed, 21 Mar 2012)

Log Message

TileCache needs to know if its containing page is in a window
https://bugs.webkit.org/show_bug.cgi?id=81821

Reviewed by Andreas Kling.

This is in preparation for throwing away invisible tiles in background tabs to reduce memory usage.

* page/FrameView.cpp:
(WebCore::FrameView::didMoveOnscreen):
(WebCore::FrameView::willMoveOffscreen):
* page/Page.cpp:
(WebCore::Page::Page):
(WebCore::Page::didMoveOnscreen):
(WebCore::Page::willMoveOffscreen):
* page/Page.h:
(WebCore::Page::isOnscreen):
(Page):
* platform/graphics/TiledBacking.h:
(TiledBacking):
* platform/graphics/ca/mac/TileCache.h:
(TileCache):
* platform/graphics/ca/mac/TileCache.mm:
(WebCore::TileCache::TileCache):
(WebCore::TileCache::setIsInWindow):
(WebCore):
* rendering/RenderLayerBacking.cpp:
(WebCore::RenderLayerBacking::RenderLayerBacking):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (111592 => 111593)


--- trunk/Source/WebCore/ChangeLog	2012-03-21 19:16:35 UTC (rev 111592)
+++ trunk/Source/WebCore/ChangeLog	2012-03-21 19:24:24 UTC (rev 111593)
@@ -1,3 +1,33 @@
+2012-03-21  Anders Carlsson  <[email protected]>
+
+        TileCache needs to know if its containing page is in a window
+        https://bugs.webkit.org/show_bug.cgi?id=81821
+
+        Reviewed by Andreas Kling.
+
+        This is in preparation for throwing away invisible tiles in background tabs to reduce memory usage.
+
+        * page/FrameView.cpp:
+        (WebCore::FrameView::didMoveOnscreen):
+        (WebCore::FrameView::willMoveOffscreen):
+        * page/Page.cpp:
+        (WebCore::Page::Page):
+        (WebCore::Page::didMoveOnscreen):
+        (WebCore::Page::willMoveOffscreen):
+        * page/Page.h:
+        (WebCore::Page::isOnscreen):
+        (Page):
+        * platform/graphics/TiledBacking.h:
+        (TiledBacking):
+        * platform/graphics/ca/mac/TileCache.h:
+        (TileCache):
+        * platform/graphics/ca/mac/TileCache.mm:
+        (WebCore::TileCache::TileCache):
+        (WebCore::TileCache::setIsInWindow):
+        (WebCore):
+        * rendering/RenderLayerBacking.cpp:
+        (WebCore::RenderLayerBacking::RenderLayerBacking):
+
 2012-03-21  Xingnan Wang  <[email protected]>
 
         Web audio layout test failed in debug with an ASSERT error in ReverbConvolverStage.cpp

Modified: trunk/Source/WebCore/page/FrameView.cpp (111592 => 111593)


--- trunk/Source/WebCore/page/FrameView.cpp	2012-03-21 19:16:35 UTC (rev 111592)
+++ trunk/Source/WebCore/page/FrameView.cpp	2012-03-21 19:24:24 UTC (rev 111593)
@@ -74,6 +74,7 @@
 
 #if USE(ACCELERATED_COMPOSITING)
 #include "RenderLayerCompositor.h"
+#include "TiledBacking.h"
 #endif
 
 #if ENABLE(SVG)
@@ -837,16 +838,24 @@
 
 void FrameView::didMoveOnscreen()
 {
-    RenderView* root = rootRenderer(this);
-    if (root)
+#if USE(ACCELERATED_COMPOSITING)
+    if (TiledBacking* tiledBacking = this->tiledBacking())
+        tiledBacking->setIsInWindow(true);
+#endif
+
+    if (RenderView* root = rootRenderer(this))
         root->didMoveOnscreen();
     contentAreaDidShow();
 }
 
 void FrameView::willMoveOffscreen()
 {
-    RenderView* root = rootRenderer(this);
-    if (root)
+#if USE(ACCELERATED_COMPOSITING)
+    if (TiledBacking* tiledBacking = this->tiledBacking())
+        tiledBacking->setIsInWindow(false);
+#endif
+
+    if (RenderView* root = rootRenderer(this))
         root->willMoveOffscreen();
     contentAreaDidHide();
 }

Modified: trunk/Source/WebCore/page/Page.cpp (111592 => 111593)


--- trunk/Source/WebCore/page/Page.cpp	2012-03-21 19:16:35 UTC (rev 111592)
+++ trunk/Source/WebCore/page/Page.cpp	2012-03-21 19:24:24 UTC (rev 111593)
@@ -154,6 +154,7 @@
     , m_viewMode(ViewModeWindowed)
     , m_minimumTimerInterval(Settings::defaultMinDOMTimerInterval())
     , m_isEditable(false)
+    , m_isOnscreen(true)
 #if ENABLE(PAGE_VISIBILITY_API)
     , m_visibilityState(PageVisibilityStateVisible)
 #endif
@@ -682,9 +683,11 @@
 
 void Page::didMoveOnscreen()
 {
+    m_isOnscreen = true;
+
     for (Frame* frame = mainFrame(); frame; frame = frame->tree()->traverseNext()) {
-        if (frame->view())
-            frame->view()->didMoveOnscreen();
+        if (FrameView* frameView = frame->view())
+            frameView->didMoveOnscreen();
     }
     
     resumeScriptedAnimations();
@@ -692,9 +695,11 @@
 
 void Page::willMoveOffscreen()
 {
+    m_isOnscreen = false;
+
     for (Frame* frame = mainFrame(); frame; frame = frame->tree()->traverseNext()) {
-        if (frame->view())
-            frame->view()->willMoveOffscreen();
+        if (FrameView* frameView = frame->view())
+            frameView->willMoveOffscreen();
     }
     
     suspendScriptedAnimations();

Modified: trunk/Source/WebCore/page/Page.h (111592 => 111593)


--- trunk/Source/WebCore/page/Page.h	2012-03-21 19:16:35 UTC (rev 111592)
+++ trunk/Source/WebCore/page/Page.h	2012-03-21 19:24:24 UTC (rev 111593)
@@ -267,6 +267,7 @@
         // Notifications when the Page starts and stops being presented via a native window.
         void didMoveOnscreen();
         void willMoveOffscreen();
+        bool isOnscreen() const { return m_isOnscreen; }
 
         void windowScreenDidChange(PlatformDisplayID);
         
@@ -419,6 +420,7 @@
         double m_minimumTimerInterval;
 
         bool m_isEditable;
+        bool m_isOnscreen;
 
 #if ENABLE(PAGE_VISIBILITY_API)
         PageVisibilityState m_visibilityState;

Modified: trunk/Source/WebCore/platform/graphics/TiledBacking.h (111592 => 111593)


--- trunk/Source/WebCore/platform/graphics/TiledBacking.h	2012-03-21 19:16:35 UTC (rev 111592)
+++ trunk/Source/WebCore/platform/graphics/TiledBacking.h	2012-03-21 19:24:24 UTC (rev 111593)
@@ -35,6 +35,7 @@
     virtual ~TiledBacking() { }
 
     virtual void visibleRectChanged(const IntRect&) = 0;
+    virtual void setIsInWindow(bool) = 0;
 };
 
 } // namespace WebCore

Modified: trunk/Source/WebCore/platform/graphics/ca/mac/TileCache.h (111592 => 111593)


--- trunk/Source/WebCore/platform/graphics/ca/mac/TileCache.h	2012-03-21 19:16:35 UTC (rev 111592)
+++ trunk/Source/WebCore/platform/graphics/ca/mac/TileCache.h	2012-03-21 19:24:24 UTC (rev 111593)
@@ -73,6 +73,7 @@
 
     // TiledBacking member functions.
     virtual void visibleRectChanged(const IntRect&) OVERRIDE;
+    virtual void setIsInWindow(bool) OVERRIDE;
 
     IntRect bounds() const;
 
@@ -102,6 +103,7 @@
     CGFloat m_scale;
     CGFloat m_deviceScaleFactor;
 
+    bool m_isInWindow;
     bool m_acceleratesDrawing;
 
     RetainPtr<CGColorRef> m_tileDebugBorderColor;

Modified: trunk/Source/WebCore/platform/graphics/ca/mac/TileCache.mm (111592 => 111593)


--- trunk/Source/WebCore/platform/graphics/ca/mac/TileCache.mm	2012-03-21 19:16:35 UTC (rev 111592)
+++ trunk/Source/WebCore/platform/graphics/ca/mac/TileCache.mm	2012-03-21 19:24:24 UTC (rev 111593)
@@ -56,6 +56,7 @@
     , m_tileRevalidationTimer(this, &TileCache::tileRevalidationTimerFired)
     , m_scale(1)
     , m_deviceScaleFactor(1)
+    , m_isInWindow(true)
     , m_acceleratesDrawing(false)
     , m_tileDebugBorderWidth(0)
 {
@@ -220,6 +221,14 @@
     revalidateTiles();
 }
 
+void TileCache::setIsInWindow(bool isInWindow)
+{
+    if (m_isInWindow == isInWindow)
+        return;
+
+    m_isInWindow = isInWindow;
+}
+
 void TileCache::setTileDebugBorderWidth(float borderWidth)
 {
     if (m_tileDebugBorderWidth == borderWidth)

Modified: trunk/Source/WebCore/rendering/RenderLayerBacking.cpp (111592 => 111593)


--- trunk/Source/WebCore/rendering/RenderLayerBacking.cpp	2012-03-21 19:16:35 UTC (rev 111592)
+++ trunk/Source/WebCore/rendering/RenderLayerBacking.cpp	2012-03-21 19:24:24 UTC (rev 111593)
@@ -52,6 +52,7 @@
 #include "RenderEmbeddedObject.h"
 #include "RenderVideo.h"
 #include "RenderView.h"
+#include "TiledBacking.h"
 
 #if ENABLE(CSS_FILTERS)
 #include "FilterEffectRenderer.h"
@@ -110,6 +111,13 @@
     }
     
     createPrimaryGraphicsLayer();
+
+    if (m_usingTiledCacheLayer) {
+        if (Page* page = renderer()->frame()->page()) {
+            if (TiledBacking* tiledBacking = m_graphicsLayer->tiledBacking())
+                tiledBacking->setIsInWindow(page->isOnscreen());
+        }
+    }
 }
 
 RenderLayerBacking::~RenderLayerBacking()
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to