OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) | 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) |
3 * (C) 2004-2005 Allan Sandfeld Jensen (kde@carewolf.com) | 3 * (C) 2004-2005 Allan Sandfeld Jensen (kde@carewolf.com) |
4 * Copyright (C) 2006, 2007 Nicholas Shanks (webkit@nickshanks.com) | 4 * Copyright (C) 2006, 2007 Nicholas Shanks (webkit@nickshanks.com) |
5 * Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 Apple Inc. All r
ights reserved. | 5 * Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 Apple Inc. All r
ights reserved. |
6 * Copyright (C) 2007 Alexey Proskuryakov <ap@webkit.org> | 6 * Copyright (C) 2007 Alexey Proskuryakov <ap@webkit.org> |
7 * Copyright (C) 2007, 2008 Eric Seidel <eric@webkit.org> | 7 * Copyright (C) 2007, 2008 Eric Seidel <eric@webkit.org> |
8 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. (http://www.t
orchmobile.com/) | 8 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. (http://www.t
orchmobile.com/) |
9 * Copyright (c) 2011, Code Aurora Forum. All rights reserved. | 9 * Copyright (c) 2011, Code Aurora Forum. All rights reserved. |
10 * Copyright (C) Research In Motion Limited 2011. All rights reserved. | 10 * Copyright (C) Research In Motion Limited 2011. All rights reserved. |
(...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
164 return *addResult.iterator->value; | 164 return *addResult.iterator->value; |
165 } | 165 } |
166 | 166 |
167 void RuleFeatureSet::collectFeaturesFromSelector(const CSSSelector& selector) | 167 void RuleFeatureSet::collectFeaturesFromSelector(const CSSSelector& selector) |
168 { | 168 { |
169 collectFeaturesFromSelector(selector, m_metadata); | 169 collectFeaturesFromSelector(selector, m_metadata); |
170 } | 170 } |
171 | 171 |
172 void RuleFeatureSet::collectFeaturesFromSelector(const CSSSelector& selector, Ru
leFeatureSet::FeatureMetadata& metadata) | 172 void RuleFeatureSet::collectFeaturesFromSelector(const CSSSelector& selector, Ru
leFeatureSet::FeatureMetadata& metadata) |
173 { | 173 { |
| 174 unsigned maxDirectAdjacentSelectors = 0; |
| 175 |
174 for (const CSSSelector* current = &selector; current; current = current->tag
History()) { | 176 for (const CSSSelector* current = &selector; current; current = current->tag
History()) { |
175 if (current->m_match == CSSSelector::Id) | 177 if (current->m_match == CSSSelector::Id) |
176 metadata.idsInRules.add(current->value()); | 178 metadata.idsInRules.add(current->value()); |
177 else if (current->m_match == CSSSelector::Class) | 179 else if (current->m_match == CSSSelector::Class) |
178 metadata.classesInRules.add(current->value()); | 180 metadata.classesInRules.add(current->value()); |
179 else if (current->isAttributeSelector()) | 181 else if (current->isAttributeSelector()) |
180 metadata.attrsInRules.add(current->attribute().localName()); | 182 metadata.attrsInRules.add(current->attribute().localName()); |
181 | 183 |
182 if (current->pseudoType() == CSSSelector::PseudoFirstLine) | 184 if (current->pseudoType() == CSSSelector::PseudoFirstLine) |
183 metadata.usesFirstLineRules = true; | 185 metadata.usesFirstLineRules = true; |
184 if (current->isDirectAdjacentSelector()) | 186 if (current->isDirectAdjacentSelector()) { |
185 metadata.maxDirectAdjacentSelectors++; | 187 maxDirectAdjacentSelectors++; |
| 188 } else if (maxDirectAdjacentSelectors) { |
| 189 if (maxDirectAdjacentSelectors > metadata.maxDirectAdjacentSelectors
) |
| 190 metadata.maxDirectAdjacentSelectors = maxDirectAdjacentSelectors
; |
| 191 maxDirectAdjacentSelectors = 0; |
| 192 } |
186 if (current->isSiblingSelector()) | 193 if (current->isSiblingSelector()) |
187 metadata.foundSiblingSelector = true; | 194 metadata.foundSiblingSelector = true; |
188 | 195 |
189 collectFeaturesFromSelectorList(current->selectorList(), metadata); | 196 collectFeaturesFromSelectorList(current->selectorList(), metadata); |
190 } | 197 } |
| 198 |
| 199 ASSERT(!maxDirectAdjacentSelectors); |
191 } | 200 } |
192 | 201 |
193 void RuleFeatureSet::collectFeaturesFromSelectorList(const CSSSelectorList* sele
ctorList, RuleFeatureSet::FeatureMetadata& metadata) | 202 void RuleFeatureSet::collectFeaturesFromSelectorList(const CSSSelectorList* sele
ctorList, RuleFeatureSet::FeatureMetadata& metadata) |
194 { | 203 { |
195 if (!selectorList) | 204 if (!selectorList) |
196 return; | 205 return; |
197 | 206 |
198 for (const CSSSelector* selector = selectorList->first(); selector; selector
= CSSSelectorList::next(*selector)) { | 207 for (const CSSSelector* selector = selectorList->first(); selector; selector
= CSSSelectorList::next(*selector)) { |
199 for (const CSSSelector* subSelector = selector; subSelector; subSelector
= subSelector->tagHistory()) | 208 for (const CSSSelector* subSelector = selector; subSelector; subSelector
= subSelector->tagHistory()) |
200 collectFeaturesFromSelector(*subSelector, metadata); | 209 collectFeaturesFromSelector(*subSelector, metadata); |
(...skipping 203 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
404 | 413 |
405 if (thisElementNeedsStyleRecalc) | 414 if (thisElementNeedsStyleRecalc) |
406 element->setNeedsStyleRecalc(LocalStyleChange); | 415 element->setNeedsStyleRecalc(LocalStyleChange); |
407 | 416 |
408 invalidationClasses.remove(oldSize, invalidationClasses.size() - oldSize); | 417 invalidationClasses.remove(oldSize, invalidationClasses.size() - oldSize); |
409 element->clearChildNeedsStyleInvalidation(); | 418 element->clearChildNeedsStyleInvalidation(); |
410 return thisElementNeedsStyleRecalc; | 419 return thisElementNeedsStyleRecalc; |
411 } | 420 } |
412 | 421 |
413 } // namespace WebCore | 422 } // namespace WebCore |
OLD | NEW |