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

Side by Side Diff: Source/core/css/RuleFeature.h

Issue 129633003: Add a first pass of a class descendant invalidator, and a containing RuleSetAnalyzer (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Implement tree walk for descendant class invalidation. Created 6 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 | Annotate | Revision Log
« no previous file with comments | « Source/core/core.gypi ('k') | Source/core/css/RuleFeature.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org)
3 * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All rights reserved. 3 * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All rights reserved.
4 * 4 *
5 * This library is free software; you can redistribute it and/or 5 * This library is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Library General Public 6 * modify it under the terms of the GNU Library General Public
7 * License as published by the Free Software Foundation; either 7 * License as published by the Free Software Foundation; either
8 * version 2 of the License, or (at your option) any later version. 8 * version 2 of the License, or (at your option) any later version.
9 * 9 *
10 * This library is distributed in the hope that it will be useful, 10 * This library is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * Library General Public License for more details. 13 * Library General Public License for more details.
14 * 14 *
15 * You should have received a copy of the GNU Library General Public License 15 * You should have received a copy of the GNU Library General Public License
16 * along with this library; see the file COPYING.LIB. If not, write to 16 * along with this library; see the file COPYING.LIB. If not, write to
17 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 17 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
18 * Boston, MA 02110-1301, USA. 18 * Boston, MA 02110-1301, USA.
19 * 19 *
20 */ 20 */
21 21
22 #ifndef RuleFeature_h 22 #ifndef RuleFeature_h
23 #define RuleFeature_h 23 #define RuleFeature_h
24 24
25 #include "core/css/analyzer/RuleSetAnalyzer.h"
25 #include "wtf/Forward.h" 26 #include "wtf/Forward.h"
26 #include "wtf/HashSet.h" 27 #include "wtf/HashSet.h"
27 #include "wtf/text/AtomicStringHash.h" 28 #include "wtf/text/AtomicStringHash.h"
28 29
29 namespace WebCore { 30 namespace WebCore {
30 31
31 class StyleRule; 32 class StyleRule;
32 class CSSSelector; 33 class CSSSelector;
33 class CSSSelectorList; 34 class CSSSelectorList;
34 35
(...skipping 12 matching lines...) Expand all
47 class RuleFeatureSet { 48 class RuleFeatureSet {
48 public: 49 public:
49 RuleFeatureSet() 50 RuleFeatureSet()
50 : m_usesFirstLineRules(false) 51 : m_usesFirstLineRules(false)
51 , m_maxDirectAdjacentSelectors(0) 52 , m_maxDirectAdjacentSelectors(0)
52 { } 53 { }
53 54
54 void add(const RuleFeatureSet&); 55 void add(const RuleFeatureSet&);
55 void clear(); 56 void clear();
56 57
57 void collectFeaturesFromSelector(const CSSSelector*); 58 void collectFeaturesFromSelector(const CSSSelector*, HashSet<AtomicString>* classesInRulesArg);
58 59
59 bool usesSiblingRules() const { return !siblingRules.isEmpty(); } 60 bool usesSiblingRules() const { return !siblingRules.isEmpty(); }
60 bool usesFirstLineRules() const { return m_usesFirstLineRules; } 61 bool usesFirstLineRules() const { return m_usesFirstLineRules; }
61 62
62 unsigned maxDirectAdjacentSelectors() const { return m_maxDirectAdjacentSele ctors; } 63 unsigned maxDirectAdjacentSelectors() const { return m_maxDirectAdjacentSele ctors; }
63 void setMaxDirectAdjacentSelectors(unsigned value) { m_maxDirectAdjacentSel ectors = std::max(value, m_maxDirectAdjacentSelectors); } 64 void setMaxDirectAdjacentSelectors(unsigned value) { m_maxDirectAdjacentSel ectors = std::max(value, m_maxDirectAdjacentSelectors); }
64 65
65 inline bool hasSelectorForAttribute(const AtomicString& attributeName) const 66 inline bool hasSelectorForAttribute(const AtomicString& attributeName) const
66 { 67 {
67 ASSERT(!attributeName.isEmpty()); 68 ASSERT(!attributeName.isEmpty());
68 return attrsInRules.contains(attributeName); 69 return attrsInRules.contains(attributeName);
69 } 70 }
70 71
71 inline bool hasSelectorForClass(const AtomicString& classValue) const 72 inline bool hasSelectorForClass(const AtomicString& classValue) const
72 { 73 {
73 ASSERT(!classValue.isEmpty()); 74 ASSERT(!classValue.isEmpty());
74 return classesInRules.contains(classValue); 75 return classesInRules.contains(classValue);
75 } 76 }
76 77
77 inline bool hasSelectorForId(const AtomicString& idValue) const 78 inline bool hasSelectorForId(const AtomicString& idValue) const
78 { 79 {
79 ASSERT(!idValue.isEmpty()); 80 ASSERT(!idValue.isEmpty());
80 return idsInRules.contains(idValue); 81 return idsInRules.contains(idValue);
81 } 82 }
82 83
84 RuleSetAnalyzer* getRuleSetAnalyzer() const;
85 RuleSetAnalyzer* ensureRuleSetAnalyzer();
86
87 // FIXME: move this stuff into the rule set analyzer.
83 HashSet<AtomicString> idsInRules; 88 HashSet<AtomicString> idsInRules;
84 HashSet<AtomicString> classesInRules; 89 HashSet<AtomicString> classesInRules;
85 HashSet<AtomicString> attrsInRules; 90 HashSet<AtomicString> attrsInRules;
86 Vector<RuleFeature> siblingRules; 91 Vector<RuleFeature> siblingRules;
87 Vector<RuleFeature> uncommonAttributeRules; 92 Vector<RuleFeature> uncommonAttributeRules;
88 private: 93 private:
89 void collectFeaturesFromSelectorList(const CSSSelectorList*); 94 RefPtr<RuleSetAnalyzer> ruleSetAnalyzer;
95
96 void collectFeaturesFromSelectorList(const CSSSelectorList*, HashSet<AtomicS tring>* classesInRulesArg);
90 97
91 bool m_usesFirstLineRules; 98 bool m_usesFirstLineRules;
92 unsigned m_maxDirectAdjacentSelectors; 99 unsigned m_maxDirectAdjacentSelectors;
93 }; 100 };
94 101
95 } // namespace WebCore 102 } // namespace WebCore
96 103
97 #endif // RuleFeature_h 104 #endif // RuleFeature_h
OLDNEW
« no previous file with comments | « Source/core/core.gypi ('k') | Source/core/css/RuleFeature.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698