Changeset 218318 in webkit
- Timestamp:
- Jun 14, 2017 11:58:02 PM (7 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r218313 r218318 1 2017-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 1 23 2017-06-14 Antoine Quint <graouts@apple.com> 2 24 -
trunk/Source/WebCore/dom/Element.cpp
r217972 r218318 2664 2664 } 2665 2665 2666 const RenderStyle* Element::existingComputedStyle() 2666 const RenderStyle* Element::existingComputedStyle() const 2667 2667 { 2668 2668 if (auto* renderTreeStyle = renderStyle()) -
trunk/Source/WebCore/dom/Element.h
r217876 r218318 506 506 LayoutRect absoluteEventHandlerBounds(bool& includesFixedPositionElements) override; 507 507 508 const RenderStyle* existingComputedStyle() const; 509 508 510 void setBeforePseudoElement(Ref<PseudoElement>&&); 509 511 void setAfterPseudoElement(Ref<PseudoElement>&&); … … 644 646 void removeShadowRoot(); 645 647 646 const RenderStyle* existingComputedStyle();647 648 const RenderStyle& resolveComputedStyle(); 648 649 -
trunk/Source/WebCore/style/RenderTreeUpdater.cpp
r217893 r218318 158 158 if (auto* renderer = node.renderer()) 159 159 renderTreePosition().invalidateNextSibling(*renderer); 160 else if (is<Element>(node) && downcast<Element>(node).hasDisplayContents()) 161 renderTreePosition().invalidateNextSibling(); 160 162 161 163 if (is<Text>(node)) { … … 171 173 172 174 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()) { 174 179 it.traverseNextSkippingChildren(); 175 180 continue; 176 181 } 177 182 178 updateElementRenderer(element, *elementUpdate); 183 if (elementUpdate) 184 updateElementRenderer(element, *elementUpdate); 179 185 180 186 bool mayHaveRenderedDescendants = element.renderer() || (element.hasDisplayContents() && shouldCreateRenderer(element, renderTreePosition().parent())); … … 275 281 else 276 282 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();279 283 } 280 284 -
trunk/Source/WebCore/style/StyleTreeResolver.cpp
r217893 r218318 180 180 return { }; 181 181 182 auto* existingStyle = element. renderStyle();182 auto* existingStyle = element.existingComputedStyle(); 183 183 184 184 if (m_didSeePendingStylesheet && (!existingStyle || existingStyle->isNotFinal())) { … … 249 249 250 250 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); 254 255 } 255 256 … … 332 333 return true; 333 334 if (parentChange == NoInherit) { 334 auto* existingStyle = element. renderStyle();335 auto* existingStyle = element.existingComputedStyle(); 335 336 if (existingStyle && existingStyle->hasExplicitlyInheritedProperties()) 336 337 return true; 337 338 } 338 339 if (element.needsStyleRecalc()) 339 return true;340 if (element.hasDisplayContents())341 340 return true; 342 341 if (shouldResolvePseudoElement(element.beforePseudoElement())) … … 418 417 parent.elementNeedingStyleRecalcAffectsNextSiblingElementStyle = element.affectsNextSiblingElementStyle(); 419 418 420 auto* style = element. renderStyle();419 auto* style = element.existingComputedStyle(); 421 420 auto change = NoChange; 422 421
Note: See TracChangeset
for help on using the changeset viewer.