Changeset 220202 in webkit
- Timestamp:
- Aug 3, 2017 6:20:30 AM (7 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r220188 r220202 1 2017-08-03 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::renderOrDisplayContentsStyle): 19 (WebCore::Style::TreeResolver::resolveElement): 20 (WebCore::Style::TreeResolver::createAnimatedElementUpdate): 21 (WebCore::Style::shouldResolveElement): 22 (WebCore::Style::TreeResolver::resolveComposedTree): 23 1 24 2017-08-02 Devin Rousso <drousso@apple.com> 2 25 -
trunk/Source/WebCore/dom/Element.cpp
r219856 r220202 2669 2669 } 2670 2670 2671 const RenderStyle* Element::existingComputedStyle() 2671 const RenderStyle* Element::existingComputedStyle() const 2672 2672 { 2673 2673 if (auto* renderTreeStyle = renderStyle()) -
trunk/Source/WebCore/dom/Element.h
r219237 r220202 508 508 LayoutRect absoluteEventHandlerBounds(bool& includesFixedPositionElements) override; 509 509 510 const RenderStyle* existingComputedStyle() const; 511 510 512 void setBeforePseudoElement(Ref<PseudoElement>&&); 511 513 void setAfterPseudoElement(Ref<PseudoElement>&&); … … 646 648 void removeShadowRoot(); 647 649 648 const RenderStyle* existingComputedStyle();649 650 const RenderStyle& resolveComputedStyle(); 650 651 -
trunk/Source/WebCore/style/RenderTreeUpdater.cpp
r218345 r220202 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
r219544 r220202 170 170 } 171 171 172 static const RenderStyle* renderOrDisplayContentsStyle(const Element& element) 173 { 174 if (auto* renderStyle = element.renderStyle()) 175 return renderStyle; 176 if (element.hasDisplayContents()) 177 return element.existingComputedStyle(); 178 return nullptr; 179 } 180 172 181 ElementUpdate TreeResolver::resolveElement(Element& element) 173 182 { … … 182 191 return { }; 183 192 184 auto* existingStyle = element.renderStyle();193 auto* existingStyle = renderOrDisplayContentsStyle(element); 185 194 186 195 if (m_didSeePendingStylesheet && (!existingStyle || existingStyle->isNotFinal())) { … … 251 260 252 261 if (!renderer) { 253 auto keepsDisplayContents = newStyle->display() == CONTENTS && element.hasDisplayContents(); 254 // Some inherited property might have changed. 255 return makeUpdate(WTFMove(newStyle), keepsDisplayContents ? Inherit : Detach); 262 auto change = Detach; 263 if (auto* oldStyle = renderOrDisplayContentsStyle(element)) 264 change = determineChange(*oldStyle, *newStyle); 265 return makeUpdate(WTFMove(newStyle), change); 256 266 } 257 267 … … 334 344 return true; 335 345 if (parentChange == NoInherit) { 336 auto* existingStyle = element.renderStyle();346 auto* existingStyle = renderOrDisplayContentsStyle(element); 337 347 if (existingStyle && existingStyle->hasExplicitlyInheritedProperties()) 338 348 return true; 339 349 } 340 350 if (element.needsStyleRecalc()) 341 return true;342 if (element.hasDisplayContents())343 351 return true; 344 352 if (shouldResolvePseudoElement(element.beforePseudoElement())) … … 420 428 parent.elementNeedingStyleRecalcAffectsNextSiblingElementStyle = element.affectsNextSiblingElementStyle(); 421 429 422 auto* style = element.renderStyle();430 auto* style = renderOrDisplayContentsStyle(element); 423 431 auto change = NoChange; 424 432
Note: See TracChangeset
for help on using the changeset viewer.