Title: [236459] trunk/Source/WebCore
Revision
236459
Author
simon.fra...@apple.com
Date
2018-09-25 08:49:20 -0700 (Tue, 25 Sep 2018)

Log Message

Clean up code around RenderLayer's "has accelerated scrolling" functions
https://bugs.webkit.org/show_bug.cgi?id=189932

Reviewed by Zalan Bujtas.

RenderLayer had:

bool hasAcceleratedTouchScrolling()
bool hasTouchScrollableOverflow()
bool usesAcceleratedScrolling()
bool usesCompositedScrolling()
bool usesAsyncScrolling()

which are hard to keep in your head. Removed usesAcceleratedScrolling() since it just returns hasTouchScrollableOverflow().
Renamed hasAcceleratedTouchScrolling() to canUseAcceleratedTouchScrolling() to indicate that it just looks at style,
not whether layout has given the layer scrollable overflow yet. Tidy up some #ifdefs.

usesCompositedScrolling() and usesAsyncScrolling() are ScrollableArea overrides, and
look at backing layers, so require that compositing has run already. Note this in comments.

* rendering/RenderLayer.cpp:
(WebCore::RenderLayer::canUseAcceleratedTouchScrolling const):
(WebCore::RenderLayer::hasTouchScrollableOverflow const):
(WebCore::RenderLayer::handleTouchEvent):
(WebCore::RenderLayer::usesAsyncScrolling const):
(WebCore::RenderLayer::showsOverflowControls const):
(WebCore::RenderLayer::calculateClipRects const):
(WebCore::RenderLayer::hasAcceleratedTouchScrolling const): Deleted.
(WebCore::RenderLayer::usesAcceleratedScrolling const): Deleted.
* rendering/RenderLayer.h:
* rendering/RenderLayerBacking.cpp:
(WebCore::layerOrAncestorIsTransformedOrUsingCompositedScrolling):
(WebCore::RenderLayerBacking::updateConfiguration):
* rendering/RenderLayerCompositor.cpp:
(WebCore::RenderLayerCompositor::useCoordinatedScrollingForLayer const):
(WebCore::RenderLayerCompositor::requiresCompositingForOverflowScrolling const):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (236458 => 236459)


--- trunk/Source/WebCore/ChangeLog	2018-09-25 15:45:42 UTC (rev 236458)
+++ trunk/Source/WebCore/ChangeLog	2018-09-25 15:49:20 UTC (rev 236459)
@@ -1,3 +1,42 @@
+2018-09-25  Simon Fraser  <simon.fra...@apple.com>
+
+        Clean up code around RenderLayer's "has accelerated scrolling" functions
+        https://bugs.webkit.org/show_bug.cgi?id=189932
+
+        Reviewed by Zalan Bujtas.
+        
+        RenderLayer had:
+        
+        bool hasAcceleratedTouchScrolling()
+        bool hasTouchScrollableOverflow()
+        bool usesAcceleratedScrolling()
+        bool usesCompositedScrolling()
+        bool usesAsyncScrolling()
+        
+        which are hard to keep in your head. Removed usesAcceleratedScrolling() since it just returns hasTouchScrollableOverflow().
+        Renamed hasAcceleratedTouchScrolling() to canUseAcceleratedTouchScrolling() to indicate that it just looks at style,
+        not whether layout has given the layer scrollable overflow yet. Tidy up some #ifdefs.
+        
+        usesCompositedScrolling() and usesAsyncScrolling() are ScrollableArea overrides, and
+        look at backing layers, so require that compositing has run already. Note this in comments.
+
+        * rendering/RenderLayer.cpp:
+        (WebCore::RenderLayer::canUseAcceleratedTouchScrolling const):
+        (WebCore::RenderLayer::hasTouchScrollableOverflow const):
+        (WebCore::RenderLayer::handleTouchEvent):
+        (WebCore::RenderLayer::usesAsyncScrolling const):
+        (WebCore::RenderLayer::showsOverflowControls const):
+        (WebCore::RenderLayer::calculateClipRects const):
+        (WebCore::RenderLayer::hasAcceleratedTouchScrolling const): Deleted.
+        (WebCore::RenderLayer::usesAcceleratedScrolling const): Deleted.
+        * rendering/RenderLayer.h:
+        * rendering/RenderLayerBacking.cpp:
+        (WebCore::layerOrAncestorIsTransformedOrUsingCompositedScrolling):
+        (WebCore::RenderLayerBacking::updateConfiguration):
+        * rendering/RenderLayerCompositor.cpp:
+        (WebCore::RenderLayerCompositor::useCoordinatedScrollingForLayer const):
+        (WebCore::RenderLayerCompositor::requiresCompositingForOverflowScrolling const):
+
 2018-09-24  Fujii Hironori  <hironori.fu...@sony.com>
 
         Rename WTF_COMPILER_GCC_OR_CLANG to WTF_COMPILER_GCC_COMPATIBLE

Modified: trunk/Source/WebCore/rendering/RenderLayer.cpp (236458 => 236459)


--- trunk/Source/WebCore/rendering/RenderLayer.cpp	2018-09-25 15:45:42 UTC (rev 236458)
+++ trunk/Source/WebCore/rendering/RenderLayer.cpp	2018-09-25 15:49:20 UTC (rev 236459)
@@ -1948,14 +1948,10 @@
     return toLayoutSize(convertToLayerCoords(ancestorLayer, LayoutPoint(), adjustForColumns));
 }
 
-#if PLATFORM(IOS)
-bool RenderLayer::hasAcceleratedTouchScrolling() const
+bool RenderLayer::canUseAcceleratedTouchScrolling() const
 {
-#if ENABLE(ACCELERATED_OVERFLOW_SCROLLING)
-    if (!scrollsOverflow())
-        return false;
-
-    return renderer().style().useTouchOverflowScrolling() || renderer().settings().alwaysUseAcceleratedOverflowScroll();
+#if PLATFORM(IOS) && ENABLE(ACCELERATED_OVERFLOW_SCROLLING)
+    return scrollsOverflow() && (renderer().style().useTouchOverflowScrolling() || renderer().settings().alwaysUseAcceleratedOverflowScroll());
 #else
     return false;
 #endif
@@ -1963,31 +1959,19 @@
 
 bool RenderLayer::hasTouchScrollableOverflow() const
 {
-    return hasAcceleratedTouchScrolling() && (hasScrollableHorizontalOverflow() || hasScrollableVerticalOverflow());
+    return canUseAcceleratedTouchScrolling() && (hasScrollableHorizontalOverflow() || hasScrollableVerticalOverflow());
 }
 
-#if ENABLE(TOUCH_EVENTS)
+#if ENABLE(IOS_TOUCH_EVENTS)
 bool RenderLayer::handleTouchEvent(const PlatformTouchEvent& touchEvent)
 {
     // If we have accelerated scrolling, let the scrolling be handled outside of WebKit.
-    if (usesAcceleratedScrolling())
+    if (hasTouchScrollableOverflow())
         return false;
 
     return ScrollableArea::handleTouchEvent(touchEvent);
 }
-#endif
-#endif // PLATFORM(IOS)
 
-bool RenderLayer::usesAcceleratedScrolling() const
-{
-#if PLATFORM(IOS)
-    return hasTouchScrollableOverflow();
-#else
-    return false;
-#endif
-}
-
-#if ENABLE(IOS_TOUCH_EVENTS)
 void RenderLayer::registerAsTouchEventListenerForScrolling()
 {
     if (!renderer().element() || m_registeredAsTouchEventListenerForScrolling)
@@ -2007,14 +1991,16 @@
 }
 #endif // ENABLE(IOS_TOUCH_EVENTS)
 
+// FIXME: this is only valid after we've made layers.
 bool RenderLayer::usesCompositedScrolling() const
 {
     return isComposited() && backing()->hasScrollingLayer();
 }
 
+// FIXME: this is only valid after we've made layers.
 bool RenderLayer::usesAsyncScrolling() const
 {
-    return hasAcceleratedTouchScrolling() && usesCompositedScrolling();
+    return canUseAcceleratedTouchScrolling() && usesCompositedScrolling();
 }
 
 static inline int adjustedScrollDelta(int beginningDelta)
@@ -3388,7 +3374,7 @@
 {
 #if PLATFORM(IOS)
     // Don't render (custom) scrollbars if we have accelerated scrolling.
-    if (hasAcceleratedTouchScrolling())
+    if (canUseAcceleratedTouchScrolling())
         return false;
 #endif
 
@@ -6080,7 +6066,7 @@
         || renderer.hasReflection()
         || renderer.style().hasIsolation()
 #if PLATFORM(IOS)
-        || layer.hasAcceleratedTouchScrolling()
+        || layer.canUseAcceleratedTouchScrolling()
 #endif
         || (renderer.style().willChange() && renderer.style().willChange()->canCreateStackingContext());
 }
@@ -6414,7 +6400,7 @@
 
 #if ENABLE(IOS_TOUCH_EVENTS)
     if (addedOrRemoved) {
-        if (isScrollable && !hasAcceleratedTouchScrolling())
+        if (isScrollable && !canUseAcceleratedTouchScrolling())
             registerAsTouchEventListenerForScrolling();
         else {
             // We only need the touch listener for unaccelerated overflow scrolling, so if we became

Modified: trunk/Source/WebCore/rendering/RenderLayer.h (236458 => 236459)


--- trunk/Source/WebCore/rendering/RenderLayer.h	2018-09-25 15:45:42 UTC (rev 236458)
+++ trunk/Source/WebCore/rendering/RenderLayer.h	2018-09-25 15:49:20 UTC (rev 236459)
@@ -251,7 +251,7 @@
 #endif
 
 #if PLATFORM(IOS)
-#if ENABLE(TOUCH_EVENTS)
+#if ENABLE(IOS_TOUCH_EVENTS)
     bool handleTouchEvent(const PlatformTouchEvent&) override;
 #endif
     
@@ -264,16 +264,12 @@
 
     bool requiresScrollBoundsOriginUpdate() const { return m_requiresScrollBoundsOriginUpdate; }
     void setRequiresScrollBoundsOriginUpdate(bool requiresUpdate = true) { m_requiresScrollBoundsOriginUpdate = requiresUpdate; }
+#endif
 
     // Returns true when the layer could do touch scrolling, but doesn't look at whether there is actually scrollable overflow.
-    bool hasAcceleratedTouchScrolling() const;
+    bool canUseAcceleratedTouchScrolling() const;
     // Returns true when there is actually scrollable overflow (requires layout to be up-to-date).
     bool hasTouchScrollableOverflow() const;
-#else
-    bool hasAcceleratedTouchScrolling() const { return false; }
-    bool hasTouchScrollableOverflow() const { return false; }
-#endif
-    bool usesAcceleratedScrolling() const;
 
     int verticalScrollbarWidth(OverlayScrollbarSizeRelevancy = IgnoreOverlayScrollbarSize) const;
     int horizontalScrollbarHeight(OverlayScrollbarSizeRelevancy = IgnoreOverlayScrollbarSize) const;
@@ -896,7 +892,7 @@
     bool usesMockScrollAnimator() const override;
     void logMockScrollAnimatorMessage(const String&) const override;
 
-#if PLATFORM(IOS)
+#if ENABLE(IOS_TOUCH_EVENTS)
     void registerAsTouchEventListenerForScrolling();
     void unregisterAsTouchEventListenerForScrolling();
 #endif

Modified: trunk/Source/WebCore/rendering/RenderLayerBacking.cpp (236458 => 236459)


--- trunk/Source/WebCore/rendering/RenderLayerBacking.cpp	2018-09-25 15:45:42 UTC (rev 236458)
+++ trunk/Source/WebCore/rendering/RenderLayerBacking.cpp	2018-09-25 15:49:20 UTC (rev 236459)
@@ -560,7 +560,7 @@
 static bool layerOrAncestorIsTransformedOrUsingCompositedScrolling(RenderLayer& layer)
 {
     for (auto* curr = &layer; curr; curr = curr->parent()) {
-        if (curr->hasTransform() || curr->usesAcceleratedScrolling())
+        if (curr->hasTransform() || curr->hasTouchScrollableOverflow())
             return true;
     }
 
@@ -686,7 +686,7 @@
     bool needsDescendantsClippingLayer = compositor().clipsCompositingDescendants(m_owningLayer);
 
     if (!renderer().view().needsLayout()) {
-        bool usesCompositedScrolling = m_owningLayer.usesAcceleratedScrolling();
+        bool usesCompositedScrolling = m_owningLayer.hasTouchScrollableOverflow();
 
         // Our scrolling layer will clip.
         if (usesCompositedScrolling)

Modified: trunk/Source/WebCore/rendering/RenderLayerCompositor.cpp (236458 => 236459)


--- trunk/Source/WebCore/rendering/RenderLayerCompositor.cpp	2018-09-25 15:45:42 UTC (rev 236458)
+++ trunk/Source/WebCore/rendering/RenderLayerCompositor.cpp	2018-09-25 15:49:20 UTC (rev 236459)
@@ -2663,7 +2663,7 @@
     if (layer.isRenderViewLayer() && hasCoordinatedScrolling())
         return true;
 
-    return layer.usesAcceleratedScrolling();
+    return layer.hasTouchScrollableOverflow();
 }
 
 bool RenderLayerCompositor::requiresCompositingForPosition(RenderLayerModelObject& renderer, const RenderLayer& layer, RenderLayer::ViewportConstrainedNotCompositedReason* viewportConstrainedNotCompositedReason) const
@@ -2748,7 +2748,7 @@
 bool RenderLayerCompositor::requiresCompositingForOverflowScrolling(const RenderLayer& layer) const
 {
 #if PLATFORM(IOS)
-    if (!layer.hasAcceleratedTouchScrolling())
+    if (!layer.canUseAcceleratedTouchScrolling())
         return false;
 
     if (!m_inPostLayoutUpdate) {
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to