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

Side by Side Diff: third_party/WebKit/Source/core/css/invalidation/StyleInvalidator.cpp

Issue 1509853002: Remove checkForChildrenAdjacentRuleChanges. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebased Created 4 years, 11 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 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "core/css/invalidation/StyleInvalidator.h" 5 #include "core/css/invalidation/StyleInvalidator.h"
6 6
7 #include "core/css/invalidation/InvalidationSet.h" 7 #include "core/css/invalidation/InvalidationSet.h"
8 #include "core/dom/Document.h" 8 #include "core/dom/Document.h"
9 #include "core/dom/Element.h" 9 #include "core/dom/Element.h"
10 #include "core/dom/ElementTraversal.h" 10 #include "core/dom/ElementTraversal.h"
(...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after
170 const SiblingInvalidationSet& invalidationSet = *m_invalidationEntries[i ndex].m_invalidationSet; 170 const SiblingInvalidationSet& invalidationSet = *m_invalidationEntries[i ndex].m_invalidationSet;
171 ++index; 171 ++index;
172 if (!invalidationSet.invalidatesElement(element)) 172 if (!invalidationSet.invalidatesElement(element))
173 continue; 173 continue;
174 174
175 if (invalidationSet.invalidatesSelf()) 175 if (invalidationSet.invalidatesSelf())
176 thisElementNeedsStyleRecalc = true; 176 thisElementNeedsStyleRecalc = true;
177 177
178 if (const DescendantInvalidationSet* descendants = invalidationSet.sibli ngDescendants()) { 178 if (const DescendantInvalidationSet* descendants = invalidationSet.sibli ngDescendants()) {
179 if (descendants->wholeSubtreeInvalid()) { 179 if (descendants->wholeSubtreeInvalid()) {
180 // Avoid directly setting SubtreeStyleChange on element, or Cont ainerNode::checkForChildrenAdjacentRuleChanges() 180 element.setNeedsStyleRecalc(SubtreeStyleChange, StyleChangeReaso nForTracing::create(StyleChangeReason::StyleInvalidator));
181 // may propagate the SubtreeStyleChange to our own siblings' sub trees.
182
183 for (Element* child = ElementTraversal::firstChild(element); chi ld; child = ElementTraversal::nextSibling(*child)) {
184 child->setNeedsStyleRecalc(SubtreeStyleChange, StyleChangeRe asonForTracing::create(StyleChangeReason::SiblingSelector));
185 }
186 return true; 181 return true;
187 } 182 }
188 183
189 if (!descendants->isEmpty()) 184 if (!descendants->isEmpty())
190 recursionData.pushInvalidationSet(*descendants); 185 recursionData.pushInvalidationSet(*descendants);
191 } 186 }
192 187
193 } 188 }
194 return thisElementNeedsStyleRecalc; 189 return thisElementNeedsStyleRecalc;
195 } 190 }
196 191
197 void StyleInvalidator::pushInvalidationSetsForElement(Element& element, Recursio nData& recursionData, SiblingData& siblingData) 192 void StyleInvalidator::pushInvalidationSetsForElement(Element& element, Recursio nData& recursionData, SiblingData& siblingData)
198 { 193 {
199 PendingInvalidations* pendingInvalidations = m_pendingInvalidationMap.get(&e lement); 194 PendingInvalidations* pendingInvalidations = m_pendingInvalidationMap.get(&e lement);
200 ASSERT(pendingInvalidations); 195 ASSERT(pendingInvalidations);
201 196
202 for (const auto& invalidationSet : pendingInvalidations->siblings()) 197 for (const auto& invalidationSet : pendingInvalidations->siblings())
203 siblingData.pushInvalidationSet(toSiblingInvalidationSet(*invalidationSe t)); 198 siblingData.pushInvalidationSet(toSiblingInvalidationSet(*invalidationSe t));
204 199
200 if (element.styleChangeType() >= SubtreeStyleChange)
201 return;
202
205 if (!pendingInvalidations->descendants().isEmpty()) { 203 if (!pendingInvalidations->descendants().isEmpty()) {
206 for (const auto& invalidationSet : pendingInvalidations->descendants()) 204 for (const auto& invalidationSet : pendingInvalidations->descendants())
207 recursionData.pushInvalidationSet(toDescendantInvalidationSet(*inval idationSet)); 205 recursionData.pushInvalidationSet(toDescendantInvalidationSet(*inval idationSet));
208 if (UNLIKELY(*s_tracingEnabled)) { 206 if (UNLIKELY(*s_tracingEnabled)) {
209 TRACE_EVENT_INSTANT1(TRACE_DISABLED_BY_DEFAULT("devtools.timeline.in validationTracking"), 207 TRACE_EVENT_INSTANT1(TRACE_DISABLED_BY_DEFAULT("devtools.timeline.in validationTracking"),
210 "StyleInvalidatorInvalidationTracking", 208 "StyleInvalidatorInvalidationTracking",
211 TRACE_EVENT_SCOPE_THREAD, 209 TRACE_EVENT_SCOPE_THREAD,
212 "data", InspectorStyleInvalidatorInvalidateEvent::invalidationLi st(element, pendingInvalidations->descendants())); 210 "data", InspectorStyleInvalidatorInvalidateEvent::invalidationLi st(element, pendingInvalidations->descendants()));
213 } 211 }
214 } 212 }
215 } 213 }
216 214
217 ALWAYS_INLINE bool StyleInvalidator::checkInvalidationSetsAgainstElement(Element & element, RecursionData& recursionData, SiblingData& siblingData) 215 ALWAYS_INLINE bool StyleInvalidator::checkInvalidationSetsAgainstElement(Element & element, RecursionData& recursionData, SiblingData& siblingData)
218 { 216 {
219 if (element.styleChangeType() >= SubtreeStyleChange || recursionData.wholeSu btreeInvalid()) { 217 if (recursionData.wholeSubtreeInvalid())
218 return false;
219
220 bool thisElementNeedsStyleRecalc = false;
221 if (element.styleChangeType() >= SubtreeStyleChange) {
220 recursionData.setWholeSubtreeInvalid(); 222 recursionData.setWholeSubtreeInvalid();
221 return false; 223 } else {
224 thisElementNeedsStyleRecalc = recursionData.matchesCurrentInvalidationSe ts(element);
225 if (UNLIKELY(!siblingData.isEmpty()))
226 thisElementNeedsStyleRecalc |= siblingData.matchCurrentInvalidationS ets(element, recursionData);
222 } 227 }
223 228
224 bool thisElementNeedsStyleRecalc = recursionData.matchesCurrentInvalidationS ets(element);
225 if (UNLIKELY(!siblingData.isEmpty()))
226 thisElementNeedsStyleRecalc |= siblingData.matchCurrentInvalidationSets( element, recursionData);
227
228 if (UNLIKELY(element.needsStyleInvalidation())) 229 if (UNLIKELY(element.needsStyleInvalidation()))
229 pushInvalidationSetsForElement(element, recursionData, siblingData); 230 pushInvalidationSetsForElement(element, recursionData, siblingData);
231
230 return thisElementNeedsStyleRecalc; 232 return thisElementNeedsStyleRecalc;
231 } 233 }
232 234
233 bool StyleInvalidator::invalidateShadowRootChildren(Element& element, RecursionD ata& recursionData) 235 bool StyleInvalidator::invalidateShadowRootChildren(Element& element, RecursionD ata& recursionData)
234 { 236 {
235 bool someChildrenNeedStyleRecalc = false; 237 bool someChildrenNeedStyleRecalc = false;
236 for (ShadowRoot* root = element.youngestShadowRoot(); root; root = root->old erShadowRoot()) { 238 for (ShadowRoot* root = element.youngestShadowRoot(); root; root = root->old erShadowRoot()) {
237 if (!recursionData.treeBoundaryCrossing() && !root->childNeedsStyleInval idation() && !root->needsStyleInvalidation()) 239 if (!recursionData.treeBoundaryCrossing() && !root->childNeedsStyleInval idation() && !root->needsStyleInvalidation())
238 continue; 240 continue;
239 SiblingData siblingData; 241 SiblingData siblingData;
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
296 } 298 }
297 299
298 DEFINE_TRACE(StyleInvalidator) 300 DEFINE_TRACE(StyleInvalidator)
299 { 301 {
300 #if ENABLE(OILPAN) 302 #if ENABLE(OILPAN)
301 visitor->trace(m_pendingInvalidationMap); 303 visitor->trace(m_pendingInvalidationMap);
302 #endif 304 #endif
303 } 305 }
304 306
305 } // namespace blink 307 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698