Title: [115344] trunk/Source/WebCore
- Revision
- 115344
- Author
- [email protected]
- Date
- 2012-04-26 13:01:44 -0700 (Thu, 26 Apr 2012)
Log Message
The tile cache should know if a frame view can ever have scrollbars
https://bugs.webkit.org/show_bug.cgi?id=84888
Reviewed by Andreas Kling.
If a frame view has overflow: hidden on its body element we know that the document will most
likely never be scrolled. The tile cache should know about this so we can optimize.
* page/FrameView.cpp:
(WebCore::FrameView::performPostLayoutTasks):
* platform/graphics/TiledBacking.h:
(TiledBacking):
* platform/graphics/ca/mac/TileCache.h:
(TileCache):
* platform/graphics/ca/mac/TileCache.mm:
(WebCore::TileCache::TileCache):
(WebCore::TileCache::setCanHaveScrollbars):
(WebCore):
* rendering/RenderLayerBacking.cpp:
(WebCore::RenderLayerBacking::RenderLayerBacking):
Modified Paths
Diff
Modified: trunk/Source/WebCore/ChangeLog (115343 => 115344)
--- trunk/Source/WebCore/ChangeLog 2012-04-26 19:59:05 UTC (rev 115343)
+++ trunk/Source/WebCore/ChangeLog 2012-04-26 20:01:44 UTC (rev 115344)
@@ -1,3 +1,26 @@
+2012-04-25 Anders Carlsson <[email protected]>
+
+ The tile cache should know if a frame view can ever have scrollbars
+ https://bugs.webkit.org/show_bug.cgi?id=84888
+
+ Reviewed by Andreas Kling.
+
+ If a frame view has overflow: hidden on its body element we know that the document will most
+ likely never be scrolled. The tile cache should know about this so we can optimize.
+
+ * page/FrameView.cpp:
+ (WebCore::FrameView::performPostLayoutTasks):
+ * platform/graphics/TiledBacking.h:
+ (TiledBacking):
+ * platform/graphics/ca/mac/TileCache.h:
+ (TileCache):
+ * platform/graphics/ca/mac/TileCache.mm:
+ (WebCore::TileCache::TileCache):
+ (WebCore::TileCache::setCanHaveScrollbars):
+ (WebCore):
+ * rendering/RenderLayerBacking.cpp:
+ (WebCore::RenderLayerBacking::RenderLayerBacking):
+
2012-04-26 Ken Buchanan <[email protected]>
Crash from removal of line break object after layout
Modified: trunk/Source/WebCore/page/FrameView.cpp (115343 => 115344)
--- trunk/Source/WebCore/page/FrameView.cpp 2012-04-26 19:59:05 UTC (rev 115343)
+++ trunk/Source/WebCore/page/FrameView.cpp 2012-04-26 20:01:44 UTC (rev 115344)
@@ -2382,6 +2382,11 @@
scrollingCoordinator->frameViewLayoutUpdated(this);
}
+#if USE(ACCELERATED_COMPOSITING)
+ if (TiledBacking* tiledBacking = this->tiledBacking())
+ tiledBacking->setCanHaveScrollbars(canHaveScrollbars());
+#endif
+
scrollToAnchor();
m_actionScheduler->resume();
Modified: trunk/Source/WebCore/platform/graphics/TiledBacking.h (115343 => 115344)
--- trunk/Source/WebCore/platform/graphics/TiledBacking.h 2012-04-26 19:59:05 UTC (rev 115343)
+++ trunk/Source/WebCore/platform/graphics/TiledBacking.h 2012-04-26 20:01:44 UTC (rev 115344)
@@ -36,6 +36,7 @@
virtual void visibleRectChanged(const IntRect&) = 0;
virtual void setIsInWindow(bool) = 0;
+ virtual void setCanHaveScrollbars(bool) = 0;
};
} // namespace WebCore
Modified: trunk/Source/WebCore/platform/graphics/ca/mac/TileCache.h (115343 => 115344)
--- trunk/Source/WebCore/platform/graphics/ca/mac/TileCache.h 2012-04-26 19:59:05 UTC (rev 115343)
+++ trunk/Source/WebCore/platform/graphics/ca/mac/TileCache.h 2012-04-26 20:01:44 UTC (rev 115344)
@@ -74,6 +74,7 @@
// TiledBacking member functions.
virtual void visibleRectChanged(const IntRect&) OVERRIDE;
virtual void setIsInWindow(bool) OVERRIDE;
+ virtual void setCanHaveScrollbars(bool) OVERRIDE;
IntRect bounds() const;
@@ -106,6 +107,7 @@
CGFloat m_deviceScaleFactor;
bool m_isInWindow;
+ bool m_canHaveScrollbars;
bool m_acceleratesDrawing;
RetainPtr<CGColorRef> m_tileDebugBorderColor;
Modified: trunk/Source/WebCore/platform/graphics/ca/mac/TileCache.mm (115343 => 115344)
--- trunk/Source/WebCore/platform/graphics/ca/mac/TileCache.mm 2012-04-26 19:59:05 UTC (rev 115343)
+++ trunk/Source/WebCore/platform/graphics/ca/mac/TileCache.mm 2012-04-26 20:01:44 UTC (rev 115344)
@@ -57,6 +57,7 @@
, m_scale(1)
, m_deviceScaleFactor(1)
, m_isInWindow(true)
+ , m_canHaveScrollbars(true)
, m_acceleratesDrawing(false)
, m_tileDebugBorderWidth(0)
{
@@ -242,6 +243,15 @@
}
}
+void TileCache::setCanHaveScrollbars(bool canHaveScrollbars)
+{
+ if (m_canHaveScrollbars == canHaveScrollbars)
+ return;
+
+ m_canHaveScrollbars = canHaveScrollbars;
+ scheduleTileRevalidation(0);
+}
+
void TileCache::setTileDebugBorderWidth(float borderWidth)
{
if (m_tileDebugBorderWidth == borderWidth)
Modified: trunk/Source/WebCore/rendering/RenderLayerBacking.cpp (115343 => 115344)
--- trunk/Source/WebCore/rendering/RenderLayerBacking.cpp 2012-04-26 19:59:05 UTC (rev 115343)
+++ trunk/Source/WebCore/rendering/RenderLayerBacking.cpp 2012-04-26 20:01:44 UTC (rev 115344)
@@ -115,8 +115,10 @@
if (m_usingTiledCacheLayer) {
if (Page* page = renderer()->frame()->page()) {
- if (TiledBacking* tiledBacking = m_graphicsLayer->tiledBacking())
+ if (TiledBacking* tiledBacking = m_graphicsLayer->tiledBacking()) {
tiledBacking->setIsInWindow(page->isOnscreen());
+ tiledBacking->setCanHaveScrollbars(renderer()->frame()->view()->canHaveScrollbars());
+ }
}
}
}
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes