Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(449)

Side by Side Diff: third_party/WebKit/Source/core/dom/StyleEngine.cpp

Issue 2703643003: Schedule a type selector invalidation set for RuleSet invalidations. (Closed)
Patch Set: Corrected expectation text. Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org)
3 * (C) 1999 Antti Koivisto (koivisto@kde.org) 3 * (C) 1999 Antti Koivisto (koivisto@kde.org)
4 * (C) 2001 Dirk Mueller (mueller@kde.org) 4 * (C) 2001 Dirk Mueller (mueller@kde.org)
5 * (C) 2006 Alexey Proskuryakov (ap@webkit.org) 5 * (C) 2006 Alexey Proskuryakov (ap@webkit.org)
6 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2011, 2012 Apple Inc. All 6 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2011, 2012 Apple Inc. All
7 * rights reserved. 7 * rights reserved.
8 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. 8 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved.
9 * (http://www.torchmobile.com/) 9 * (http://www.torchmobile.com/)
10 * Copyright (C) 2008, 2009, 2011, 2012 Google Inc. All rights reserved. 10 * Copyright (C) 2008, 2009, 2011, 2012 Google Inc. All rights reserved.
(...skipping 814 matching lines...) Expand 10 before | Expand all | Expand 10 after
825 element, id); 825 element, id);
826 if (classNames) { 826 if (classNames) {
827 unsigned classNameCount = classNames->size(); 827 unsigned classNameCount = classNames->size();
828 for (size_t i = 0; i < classNameCount; i++) 828 for (size_t i = 0; i < classNameCount; i++)
829 ruleSet->features().collectInvalidationSetsForClass( 829 ruleSet->features().collectInvalidationSetsForClass(
830 invalidationLists, element, (*classNames)[i]); 830 invalidationLists, element, (*classNames)[i]);
831 } 831 }
832 for (const Attribute& attribute : element.attributes()) 832 for (const Attribute& attribute : element.attributes())
833 ruleSet->features().collectInvalidationSetsForAttribute( 833 ruleSet->features().collectInvalidationSetsForAttribute(
834 invalidationLists, element, attribute.name()); 834 invalidationLists, element, attribute.name());
835 if (ruleSet->tagRules(element.localNameForSelectorMatching()))
836 element.setNeedsStyleRecalc(LocalStyleChange,
837 StyleChangeReasonForTracing::create(
838 StyleChangeReason::StyleSheetChange));
839 } 835 }
840 m_styleInvalidator.scheduleInvalidationSetsForNode(invalidationLists, 836 m_styleInvalidator.scheduleInvalidationSetsForNode(invalidationLists,
841 element); 837 element);
842 } 838 }
843 839
840 void StyleEngine::scheduleTypeRuleSetInvalidations(
841 ContainerNode& node,
842 const HeapHashSet<Member<RuleSet>>& ruleSets) {
843 InvalidationLists invalidationLists;
844 for (const auto& ruleSet : ruleSets)
845 ruleSet->features().collectTypeRuleInvalidationSet(invalidationLists, node);
846 DCHECK(invalidationLists.siblings.isEmpty());
847 m_styleInvalidator.scheduleInvalidationSetsForNode(invalidationLists, node);
848 }
849
844 void StyleEngine::invalidateSlottedElements(HTMLSlotElement& slot) { 850 void StyleEngine::invalidateSlottedElements(HTMLSlotElement& slot) {
845 for (auto& node : slot.getDistributedNodes()) { 851 for (auto& node : slot.getDistributedNodes()) {
846 if (node->isElementNode()) 852 if (node->isElementNode())
847 node->setNeedsStyleRecalc(LocalStyleChange, 853 node->setNeedsStyleRecalc(LocalStyleChange,
848 StyleChangeReasonForTracing::create( 854 StyleChangeReasonForTracing::create(
849 StyleChangeReason::StyleSheetChange)); 855 StyleChangeReason::StyleSheetChange));
850 } 856 }
851 } 857 }
852 858
853 void StyleEngine::scheduleInvalidationsForRuleSets( 859 void StyleEngine::scheduleInvalidationsForRuleSets(
854 TreeScope& treeScope, 860 TreeScope& treeScope,
855 const HeapHashSet<Member<RuleSet>>& ruleSets) { 861 const HeapHashSet<Member<RuleSet>>& ruleSets) {
856 #if DCHECK_IS_ON() 862 #if DCHECK_IS_ON()
857 // Full scope recalcs should be handled while collecting the ruleSets before 863 // Full scope recalcs should be handled while collecting the ruleSets before
858 // calling this method. 864 // calling this method.
859 for (auto ruleSet : ruleSets) 865 for (auto ruleSet : ruleSets)
860 DCHECK(!ruleSet->features().needsFullRecalcForRuleSetInvalidation()); 866 DCHECK(!ruleSet->features().needsFullRecalcForRuleSetInvalidation());
861 #endif // DCHECK_IS_ON() 867 #endif // DCHECK_IS_ON()
862 868
863 TRACE_EVENT0("blink,blink_style", 869 TRACE_EVENT0("blink,blink_style",
864 "StyleEngine::scheduleInvalidationsForRuleSets"); 870 "StyleEngine::scheduleInvalidationsForRuleSets");
865 871
872 scheduleTypeRuleSetInvalidations(treeScope.rootNode(), ruleSets);
873
866 bool invalidateSlotted = false; 874 bool invalidateSlotted = false;
867 if (treeScope.rootNode().isShadowRoot()) { 875 if (treeScope.rootNode().isShadowRoot()) {
868 Element& host = toShadowRoot(treeScope.rootNode()).host(); 876 Element& host = toShadowRoot(treeScope.rootNode()).host();
869 scheduleRuleSetInvalidationsForElement(host, ruleSets); 877 scheduleRuleSetInvalidationsForElement(host, ruleSets);
870 if (host.getStyleChangeType() >= SubtreeStyleChange) 878 if (host.getStyleChangeType() >= SubtreeStyleChange)
871 return; 879 return;
872 for (auto ruleSet : ruleSets) { 880 for (auto ruleSet : ruleSets) {
873 if (ruleSet->hasSlottedRules()) { 881 if (ruleSet->hasSlottedRules()) {
874 invalidateSlotted = true; 882 invalidateSlotted = true;
875 break; 883 break;
(...skipping 270 matching lines...) Expand 10 before | Expand all | Expand 10 after
1146 } 1154 }
1147 1155
1148 DEFINE_TRACE_WRAPPERS(StyleEngine) { 1156 DEFINE_TRACE_WRAPPERS(StyleEngine) {
1149 for (auto sheet : m_injectedAuthorStyleSheets) { 1157 for (auto sheet : m_injectedAuthorStyleSheets) {
1150 visitor->traceWrappers(sheet); 1158 visitor->traceWrappers(sheet);
1151 } 1159 }
1152 visitor->traceWrappers(m_documentStyleSheetCollection); 1160 visitor->traceWrappers(m_documentStyleSheetCollection);
1153 } 1161 }
1154 1162
1155 } // namespace blink 1163 } // namespace blink
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/core/dom/StyleEngine.h ('k') | third_party/WebKit/Source/core/dom/StyleEngineTest.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698