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()