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