Changeset 218318 in webkit


Ignore:
Timestamp:
Jun 14, 2017 11:58:02 PM (7 years ago)
Author:
commit-queue@webkit.org
Message:

Don't always recalc the style of display: contents elements.
https://bugs.webkit.org/show_bug.cgi?id=172753

Patch by Emilio Cobos Álvarez <ecobos@igalia.com> on 2017-06-15
Reviewed by Antti Koivisto.

No new tests (no functionality change). This only removes an
inefficiency.

  • dom/Element.cpp:

(WebCore::Element::existingComputedStyle):

  • dom/Element.h:
  • style/RenderTreeUpdater.cpp:

(WebCore::RenderTreeUpdater::updateRenderTree):
(WebCore::RenderTreeUpdater::updateElementRenderer):

  • style/StyleTreeResolver.cpp:

(WebCore::Style::TreeResolver::resolveElement):
(WebCore::Style::TreeResolver::createAnimatedElementUpdate):
(WebCore::Style::shouldResolveElement):
(WebCore::Style::TreeResolver::resolveComposedTree):

Location:
trunk/Source/WebCore
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r218313 r218318  
     12017-06-15 Emilio Cobos Álvarez  <ecobos@igalia.com>
     2
     3        Don't always recalc the style of display: contents elements.
     4        https://bugs.webkit.org/show_bug.cgi?id=172753
     5
     6        Reviewed by Antti Koivisto.
     7
     8        No new tests (no functionality change). This only removes an
     9        inefficiency.
     10
     11        * dom/Element.cpp:
     12        (WebCore::Element::existingComputedStyle):
     13        * dom/Element.h:
     14        * style/RenderTreeUpdater.cpp:
     15        (WebCore::RenderTreeUpdater::updateRenderTree):
     16        (WebCore::RenderTreeUpdater::updateElementRenderer):
     17        * style/StyleTreeResolver.cpp:
     18        (WebCore::Style::TreeResolver::resolveElement):
     19        (WebCore::Style::TreeResolver::createAnimatedElementUpdate):
     20        (WebCore::Style::shouldResolveElement):
     21        (WebCore::Style::TreeResolver::resolveComposedTree):
     22
    1232017-06-14  Antoine Quint  <graouts@apple.com>
    224
  • trunk/Source/WebCore/dom/Element.cpp

    r217972 r218318  
    26642664}
    26652665
    2666 const RenderStyle* Element::existingComputedStyle()
     2666const RenderStyle* Element::existingComputedStyle() const
    26672667{
    26682668    if (auto* renderTreeStyle = renderStyle())
  • trunk/Source/WebCore/dom/Element.h

    r217876 r218318  
    506506    LayoutRect absoluteEventHandlerBounds(bool& includesFixedPositionElements) override;
    507507
     508    const RenderStyle* existingComputedStyle() const;
     509
    508510    void setBeforePseudoElement(Ref<PseudoElement>&&);
    509511    void setAfterPseudoElement(Ref<PseudoElement>&&);
     
    644646    void removeShadowRoot();
    645647
    646     const RenderStyle* existingComputedStyle();
    647648    const RenderStyle& resolveComputedStyle();
    648649
  • trunk/Source/WebCore/style/RenderTreeUpdater.cpp

    r217893 r218318  
    158158        if (auto* renderer = node.renderer())
    159159            renderTreePosition().invalidateNextSibling(*renderer);
     160        else if (is<Element>(node) && downcast<Element>(node).hasDisplayContents())
     161            renderTreePosition().invalidateNextSibling();
    160162
    161163        if (is<Text>(node)) {
     
    171173
    172174        auto* elementUpdate = m_styleUpdate->elementUpdate(element);
    173         if (!elementUpdate) {
     175
     176        // We hop through display: contents elements in findRenderingRoot, so
     177        // there may be other updates down the tree.
     178        if (!elementUpdate && !element.hasDisplayContents()) {
    174179            it.traverseNextSkippingChildren();
    175180            continue;
    176181        }
    177182
    178         updateElementRenderer(element, *elementUpdate);
     183        if (elementUpdate)
     184            updateElementRenderer(element, *elementUpdate);
    179185
    180186        bool mayHaveRenderedDescendants = element.renderer() || (element.hasDisplayContents() && shouldCreateRenderer(element, renderTreePosition().parent()));
     
    275281        else
    276282            element.storeDisplayContentsStyle(RenderStyle::clonePtr(*update.style));
    277         // Render tree position needs to be recomputed as rendering siblings may be found from the display:contents subtree.
    278         renderTreePosition().invalidateNextSibling();
    279283    }
    280284
  • trunk/Source/WebCore/style/StyleTreeResolver.cpp

    r217893 r218318  
    180180        return { };
    181181
    182     auto* existingStyle = element.renderStyle();
     182    auto* existingStyle = element.existingComputedStyle();
    183183
    184184    if (m_didSeePendingStylesheet && (!existingStyle || existingStyle->isNotFinal())) {
     
    249249
    250250    if (!renderer) {
    251         auto keepsDisplayContents = newStyle->display() == CONTENTS && element.hasDisplayContents();
    252         // Some inherited property might have changed.
    253         return makeUpdate(WTFMove(newStyle), keepsDisplayContents ? Inherit : Detach);
     251        auto change = Detach;
     252        if (auto* oldStyle = element.existingComputedStyle())
     253            change = determineChange(*oldStyle, *newStyle);
     254        return makeUpdate(WTFMove(newStyle), change);
    254255    }
    255256
     
    332333        return true;
    333334    if (parentChange == NoInherit) {
    334         auto* existingStyle = element.renderStyle();
     335        auto* existingStyle = element.existingComputedStyle();
    335336        if (existingStyle && existingStyle->hasExplicitlyInheritedProperties())
    336337            return true;
    337338    }
    338339    if (element.needsStyleRecalc())
    339         return true;
    340     if (element.hasDisplayContents())
    341340        return true;
    342341    if (shouldResolvePseudoElement(element.beforePseudoElement()))
     
    418417            parent.elementNeedingStyleRecalcAffectsNextSiblingElementStyle = element.affectsNextSiblingElementStyle();
    419418
    420         auto* style = element.renderStyle();
     419        auto* style = element.existingComputedStyle();
    421420        auto change = NoChange;
    422421
Note: See TracChangeset for help on using the changeset viewer.