Changeset 196666 in webkit


Ignore:
Timestamp:
Feb 16, 2016 3:24:14 PM (8 years ago)
Author:
Simon Fraser
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:
Location:
trunk/Source/WebCore
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r196664 r196666  
     12016-02-16  Simon Fraser  <simon.fraser@apple.com>
     2
     3        Every RenderLayer should not have to remove itself from the scrollableArea set
     4        https://bugs.webkit.org/show_bug.cgi?id=154311
     5
     6        Reviewed by Zalan Bujtas.
     7
     8        A subset of RenderLayers are are scrollable, and get registered on the FrameView,
     9        but we pay the cost of a hash lookup for removal on every RenderLayer, which is a waste.
     10       
     11        Store a bit that tells RenderLayer that it's in the set and needs to be removed.
     12
     13        * rendering/RenderLayer.cpp:
     14        (WebCore::RenderLayer::RenderLayer):
     15        (WebCore::RenderLayer::~RenderLayer):
     16        (WebCore::RenderLayer::calculateClipRects):
     17        * rendering/RenderLayer.h:
     18
    1192016-02-16  Daniel Bates  <dabates@apple.com>
    220
  • trunk/Source/WebCore/rendering/RenderLayer.cpp

    r196244 r196666  
    281281    , m_visibleDescendantStatusDirty(false)
    282282    , m_hasVisibleDescendant(false)
     283    , m_registeredScrollableArea(false)
    283284    , m_3DTransformedDescendantStatusDirty(true)
    284285    , m_has3DTransformedDescendant(false)
     
    346347        renderer().frame().eventHandler().resizeLayerDestroyed();
    347348
    348     renderer().view().frameView().removeScrollableArea(this);
     349    ASSERT(m_registeredScrollableArea == renderer().view().frameView().containsScrollableArea(this));
     350
     351    if (m_registeredScrollableArea)
     352        renderer().view().frameView().removeScrollableArea(this);
    349353
    350354    if (!renderer().documentBeingDestroyed()) {
     
    67316735    bool isScrollable = hasOverflow && isVisibleToHitTest;
    67326736    bool addedOrRemoved = false;
    6733     if (isScrollable)
    6734         addedOrRemoved = frameView.addScrollableArea(this);
    6735     else
     6737   
     6738    ASSERT(m_registeredScrollableArea == frameView.containsScrollableArea(this));
     6739   
     6740    if (isScrollable) {
     6741        if (!m_registeredScrollableArea) {
     6742            addedOrRemoved = frameView.addScrollableArea(this);
     6743            m_registeredScrollableArea = true;
     6744        }
     6745    } else if (m_registeredScrollableArea) {
    67366746        addedOrRemoved = frameView.removeScrollableArea(this);
     6747        m_registeredScrollableArea = false;
     6748    }
    67376749   
    67386750    if (addedOrRemoved)
  • trunk/Source/WebCore/rendering/RenderLayer.h

    r196244 r196666  
    10391039    bool m_visibleDescendantStatusDirty : 1;
    10401040    bool m_hasVisibleDescendant : 1;
     1041    bool m_registeredScrollableArea : 1;
    10411042
    10421043    bool m_3DTransformedDescendantStatusDirty : 1;
Note: See TracChangeset for help on using the changeset viewer.