Title: [249045] trunk/Source/WebCore
Revision
249045
Author
simon.fra...@apple.com
Date
2019-08-23 08:31:12 -0700 (Fri, 23 Aug 2019)

Log Message

Cache hasCompositedScrollableOverflow as a bit on RenderLayer
https://bugs.webkit.org/show_bug.cgi?id=201065

Reviewed by Zalan Bujtas.

hasCompositedScrollableOverflow() is pretty hot on some compositing-related code paths, and isn't
super cheap, as it checks a Setting and calls into renderer code. Optimize by computing it in
computeScrollDimensions().

* rendering/RenderLayer.cpp:
(WebCore::RenderLayer::RenderLayer):
(WebCore::RenderLayer::hasCompositedScrollableOverflow const):
(WebCore::RenderLayer::computeScrollDimensions):
* rendering/RenderLayer.h:

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (249044 => 249045)


--- trunk/Source/WebCore/ChangeLog	2019-08-23 15:14:46 UTC (rev 249044)
+++ trunk/Source/WebCore/ChangeLog	2019-08-23 15:31:12 UTC (rev 249045)
@@ -1,5 +1,22 @@
 2019-08-23  Simon Fraser  <simon.fra...@apple.com>
 
+        Cache hasCompositedScrollableOverflow as a bit on RenderLayer
+        https://bugs.webkit.org/show_bug.cgi?id=201065
+
+        Reviewed by Zalan Bujtas.
+
+        hasCompositedScrollableOverflow() is pretty hot on some compositing-related code paths, and isn't
+        super cheap, as it checks a Setting and calls into renderer code. Optimize by computing it in
+        computeScrollDimensions().
+
+        * rendering/RenderLayer.cpp:
+        (WebCore::RenderLayer::RenderLayer):
+        (WebCore::RenderLayer::hasCompositedScrollableOverflow const):
+        (WebCore::RenderLayer::computeScrollDimensions):
+        * rendering/RenderLayer.h:
+
+2019-08-23  Simon Fraser  <simon.fra...@apple.com>
+
         Don't call clipCrossesPaintingBoundary() when not necessary
         https://bugs.webkit.org/show_bug.cgi?id=201064
 

Modified: trunk/Source/WebCore/rendering/RenderLayer.cpp (249044 => 249045)


--- trunk/Source/WebCore/rendering/RenderLayer.cpp	2019-08-23 15:14:46 UTC (rev 249044)
+++ trunk/Source/WebCore/rendering/RenderLayer.cpp	2019-08-23 15:31:12 UTC (rev 249045)
@@ -308,6 +308,7 @@
     , m_has3DTransformedDescendant(false)
     , m_hasCompositingDescendant(false)
     , m_hasCompositedScrollingAncestor(false)
+    , m_hasCompositedScrollableOverflow(false)
     , m_hasTransformedAncestor(false)
     , m_has3DTransformedAncestor(false)
     , m_indirectCompositingReason(static_cast<unsigned>(IndirectCompositingReason::None))
@@ -2288,11 +2289,6 @@
 #endif
 }
 
-bool RenderLayer::hasCompositedScrollableOverflow() const
-{
-    return canUseCompositedScrolling() && (hasScrollableHorizontalOverflow() || hasScrollableVerticalOverflow());
-}
-
 #if ENABLE(IOS_TOUCH_EVENTS)
 bool RenderLayer::handleTouchEvent(const PlatformTouchEvent& touchEvent)
 {
@@ -3571,6 +3567,8 @@
         scrollableLeftOverflow -= verticalScrollbarWidth();
     int scrollableTopOverflow = roundToInt(overflowTop() - box->borderTop());
     setScrollOrigin(IntPoint(-scrollableLeftOverflow, -scrollableTopOverflow));
+    
+    m_hasCompositedScrollableOverflow = canUseCompositedScrolling() && (hasScrollableHorizontalOverflow() || hasScrollableVerticalOverflow());
 }
 
 bool RenderLayer::hasScrollableHorizontalOverflow() const

Modified: trunk/Source/WebCore/rendering/RenderLayer.h (249044 => 249045)


--- trunk/Source/WebCore/rendering/RenderLayer.h	2019-08-23 15:14:46 UTC (rev 249044)
+++ trunk/Source/WebCore/rendering/RenderLayer.h	2019-08-23 15:31:12 UTC (rev 249045)
@@ -493,7 +493,7 @@
     // Returns true when the layer could do touch scrolling, but doesn't look at whether there is actually scrollable overflow.
     bool canUseCompositedScrolling() const;
     // Returns true when there is actually scrollable overflow (requires layout to be up-to-date).
-    bool hasCompositedScrollableOverflow() const;
+    bool hasCompositedScrollableOverflow() const { return m_hasCompositedScrollableOverflow; }
 
     int verticalScrollbarWidth(OverlayScrollbarSizeRelevancy = IgnoreOverlayScrollbarSize) const;
     int horizontalScrollbarHeight(OverlayScrollbarSizeRelevancy = IgnoreOverlayScrollbarSize) const;
@@ -1233,6 +1233,7 @@
     bool m_hasCompositingDescendant : 1; // In the z-order tree.
 
     bool m_hasCompositedScrollingAncestor : 1; // In the layer-order tree.
+    bool m_hasCompositedScrollableOverflow : 1;
 
     bool m_hasTransformedAncestor : 1;
     bool m_has3DTransformedAncestor : 1;
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to