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

Reply via email to