Changeset 172517 in webkit
- Timestamp:
- Aug 13, 2014, 3:13:43 AM (11 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r172513 r172517 1 2014-08-13 Antti Koivisto <antti@apple.com> 2 3 Don't recurse into non-rendered subtrees when computing style 4 https://bugs.webkit.org/show_bug.cgi?id=135844 5 6 Reviewed by Andreas Kling. 7 8 * style/StyleResolveTree.cpp: 9 (WebCore::Style::resetStyleForNonRenderedDescendants): 10 11 Do a simple reset of the style dirty bits and any computed style in non-renderer subtrees. 12 13 (WebCore::Style::attachRenderTree): 14 (WebCore::Style::resolveTree): 15 16 Don't recurse into descendants if the element does not create a renderer. 17 We didn't compute style anyway in such subtrees. 18 1 19 2014-08-11 Myles C. Maxfield <mmaxfield@apple.com> 2 20 -
trunk/Source/WebCore/style/StyleResolveTree.cpp
r172505 r172517 556 556 } 557 557 558 static void resetStyleForNonRenderedDescendants(Element& current) 559 { 560 ASSERT(!current.renderStyle()); 561 for (auto& child : childrenOfType<Element>(current)) { 562 ASSERT(!child.renderer()); 563 if (child.needsStyleRecalc()) { 564 child.resetComputedStyle(); 565 child.clearNeedsStyleRecalc(); 566 } 567 if (child.childNeedsStyleRecalc()) { 568 resetStyleForNonRenderedDescendants(child); 569 child.clearChildNeedsStyleRecalc(); 570 } 571 } 572 } 573 558 574 static bool needsPseudoElement(Element& current, PseudoId pseudoId) 559 575 { … … 583 599 WidgetHierarchyUpdatesSuspensionScope suspendWidgetHierarchyUpdates; 584 600 601 if (isInsertionPoint(current)) { 602 attachDistributedChildren(toInsertionPoint(current), inheritedStyle, renderTreePosition); 603 current.clearNeedsStyleRecalc(); 604 current.clearChildNeedsStyleRecalc(); 605 return; 606 } 607 585 608 if (current.hasCustomStyleResolveCallbacks()) 586 609 current.willAttachRenderers(); … … 588 611 createRendererIfNeeded(current, inheritedStyle, renderTreePosition, resolvedStyle); 589 612 590 StyleResolverParentPusher parentPusher(¤t); 591 592 RenderTreePosition childRenderTreePosition(current.renderer()); 593 attachBeforeOrAfterPseudoElementIfNeeded(current, BEFORE, childRenderTreePosition); 594 595 if (ShadowRoot* shadowRoot = current.shadowRoot()) { 596 parentPusher.push(); 597 attachShadowRoot(*shadowRoot); 598 } else if (current.firstChild()) 599 parentPusher.push(); 600 601 if (isInsertionPoint(current)) 602 attachDistributedChildren(toInsertionPoint(current), inheritedStyle, renderTreePosition); 603 else 604 attachChildren(current, current.renderStyle(), childRenderTreePosition); 613 if (RenderStyle* style = current.renderStyle()) { 614 StyleResolverParentPusher parentPusher(¤t); 615 616 RenderTreePosition childRenderTreePosition(current.renderer()); 617 attachBeforeOrAfterPseudoElementIfNeeded(current, BEFORE, childRenderTreePosition); 618 619 if (ShadowRoot* shadowRoot = current.shadowRoot()) { 620 parentPusher.push(); 621 attachShadowRoot(*shadowRoot); 622 } else if (current.firstChild()) 623 parentPusher.push(); 624 625 attachChildren(current, style, childRenderTreePosition); 626 627 if (AXObjectCache* cache = current.document().axObjectCache()) 628 cache->updateCacheAfterNodeIsAttached(¤t); 629 630 attachBeforeOrAfterPseudoElementIfNeeded(current, AFTER, childRenderTreePosition); 631 632 current.updateFocusAppearanceAfterAttachIfNeeded(); 633 } else 634 resetStyleForNonRenderedDescendants(current); 605 635 606 636 current.clearNeedsStyleRecalc(); 607 637 current.clearChildNeedsStyleRecalc(); 608 609 if (AXObjectCache* cache = current.document().axObjectCache())610 cache->updateCacheAfterNodeIsAttached(¤t);611 612 attachBeforeOrAfterPseudoElementIfNeeded(current, AFTER, childRenderTreePosition);613 614 current.updateFocusAppearanceAfterAttachIfNeeded();615 638 616 639 if (current.hasCustomStyleResolveCallbacks()) … … 867 890 ASSERT(change != Detach); 868 891 892 if (isInsertionPoint(current)) { 893 current.clearNeedsStyleRecalc(); 894 current.clearChildNeedsStyleRecalc(); 895 return; 896 } 897 869 898 if (current.hasCustomStyleResolveCallbacks()) { 870 899 if (!current.willRecalcStyle(change)) … … 885 914 change = resolveLocal(current, inheritedStyle, renderTreePosition, change); 886 915 887 if (change != Detach) { 916 RenderStyle* style = current.renderStyle(); 917 918 if (change != Detach && style) { 888 919 StyleResolverParentPusher parentPusher(¤t); 889 920 … … 918 949 if (change >= Inherit || childElement->childNeedsStyleRecalc() || childElement->needsStyleRecalc()) { 919 950 parentPusher.push(); 920 resolveTree(*childElement, current.renderStyle(), childRenderTreePosition, change);951 resolveTree(*childElement, style, childRenderTreePosition, change); 921 952 } 922 953 forceCheckOfNextElementSibling = childRulesChanged && hasDirectAdjacentRules; … … 926 957 updateBeforeOrAfterPseudoElement(current, change, AFTER, childRenderTreePosition); 927 958 } 959 if (change != Detach && !style) 960 resetStyleForNonRenderedDescendants(current); 928 961 929 962 current.clearNeedsStyleRecalc();
Note:
See TracChangeset
for help on using the changeset viewer.