Title: [196666] trunk/Source/WebCore
Revision
196666
Author
[email protected]
Date
2016-02-16 15:24:14 -0800 (Tue, 16 Feb 2016)

Log Message

Every RenderLayer should not have to remove itself from the scrollableArea set
https://bugs.webkit.org/show_bug.cgi?id=154311

Reviewed by Zalan Bujtas.

A subset of RenderLayers are are scrollable, and get registered on the FrameView,
but we pay the cost of a hash lookup for removal on every RenderLayer, which is a waste.

Store a bit that tells RenderLayer that it's in the set and needs to be removed.

* rendering/RenderLayer.cpp:
(WebCore::RenderLayer::RenderLayer):
(WebCore::RenderLayer::~RenderLayer):
(WebCore::RenderLayer::calculateClipRects):
* rendering/RenderLayer.h:

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (196665 => 196666)


--- trunk/Source/WebCore/ChangeLog	2016-02-16 23:24:11 UTC (rev 196665)
+++ trunk/Source/WebCore/ChangeLog	2016-02-16 23:24:14 UTC (rev 196666)
@@ -1,3 +1,21 @@
+2016-02-16  Simon Fraser  <[email protected]>
+
+        Every RenderLayer should not have to remove itself from the scrollableArea set
+        https://bugs.webkit.org/show_bug.cgi?id=154311
+
+        Reviewed by Zalan Bujtas.
+
+        A subset of RenderLayers are are scrollable, and get registered on the FrameView,
+        but we pay the cost of a hash lookup for removal on every RenderLayer, which is a waste.
+        
+        Store a bit that tells RenderLayer that it's in the set and needs to be removed.
+
+        * rendering/RenderLayer.cpp:
+        (WebCore::RenderLayer::RenderLayer):
+        (WebCore::RenderLayer::~RenderLayer):
+        (WebCore::RenderLayer::calculateClipRects):
+        * rendering/RenderLayer.h:
+
 2016-02-16  Daniel Bates  <[email protected]>
 
         CSP: Update violation report 'Content-Type' header

Modified: trunk/Source/WebCore/rendering/RenderLayer.cpp (196665 => 196666)


--- trunk/Source/WebCore/rendering/RenderLayer.cpp	2016-02-16 23:24:11 UTC (rev 196665)
+++ trunk/Source/WebCore/rendering/RenderLayer.cpp	2016-02-16 23:24:14 UTC (rev 196666)
@@ -280,6 +280,7 @@
     , m_hasVisibleContent(false)
     , m_visibleDescendantStatusDirty(false)
     , m_hasVisibleDescendant(false)
+    , m_registeredScrollableArea(false)
     , m_3DTransformedDescendantStatusDirty(true)
     , m_has3DTransformedDescendant(false)
     , m_hasCompositingDescendant(false)
@@ -345,8 +346,11 @@
     if (inResizeMode() && !renderer().documentBeingDestroyed())
         renderer().frame().eventHandler().resizeLayerDestroyed();
 
-    renderer().view().frameView().removeScrollableArea(this);
+    ASSERT(m_registeredScrollableArea == renderer().view().frameView().containsScrollableArea(this));
 
+    if (m_registeredScrollableArea)
+        renderer().view().frameView().removeScrollableArea(this);
+
     if (!renderer().documentBeingDestroyed()) {
 #if ENABLE(IOS_TOUCH_EVENTS)
         unregisterAsTouchEventListenerForScrolling();
@@ -6730,10 +6734,18 @@
 
     bool isScrollable = hasOverflow && isVisibleToHitTest;
     bool addedOrRemoved = false;
-    if (isScrollable)
-        addedOrRemoved = frameView.addScrollableArea(this);
-    else
+    
+    ASSERT(m_registeredScrollableArea == frameView.containsScrollableArea(this));
+    
+    if (isScrollable) {
+        if (!m_registeredScrollableArea) {
+            addedOrRemoved = frameView.addScrollableArea(this);
+            m_registeredScrollableArea = true;
+        }
+    } else if (m_registeredScrollableArea) {
         addedOrRemoved = frameView.removeScrollableArea(this);
+        m_registeredScrollableArea = false;
+    }
     
     if (addedOrRemoved)
         updateNeedsCompositedScrolling();

Modified: trunk/Source/WebCore/rendering/RenderLayer.h (196665 => 196666)


--- trunk/Source/WebCore/rendering/RenderLayer.h	2016-02-16 23:24:11 UTC (rev 196665)
+++ trunk/Source/WebCore/rendering/RenderLayer.h	2016-02-16 23:24:14 UTC (rev 196666)
@@ -1038,6 +1038,7 @@
     bool m_hasVisibleContent : 1;
     bool m_visibleDescendantStatusDirty : 1;
     bool m_hasVisibleDescendant : 1;
+    bool m_registeredScrollableArea : 1;
 
     bool m_3DTransformedDescendantStatusDirty : 1;
     bool m_has3DTransformedDescendant : 1;  // Set on a stacking context layer that has 3D descendants anywhere
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to