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

Side by Side Diff: Source/core/css/resolver/StyleResolver.h

Issue 34623009: Revamp style resolver stats (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: fix stats for mac, crazy StyleResolver constructor side effects Created 7 years, 1 month 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
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,
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
58 class ElementRuleCollector; 58 class ElementRuleCollector;
59 class KeyframeList; 59 class KeyframeList;
60 class KeyframeValue; 60 class KeyframeValue;
61 class MediaQueryEvaluator; 61 class MediaQueryEvaluator;
62 class MediaQueryResult; 62 class MediaQueryResult;
63 class RenderRegion; 63 class RenderRegion;
64 class RuleData; 64 class RuleData;
65 class Settings; 65 class Settings;
66 class StyleKeyframe; 66 class StyleKeyframe;
67 class StylePropertySet; 67 class StylePropertySet;
68 class StyleResolverStats;
68 class StyleRule; 69 class StyleRule;
69 class StyleRuleKeyframes; 70 class StyleRuleKeyframes;
70 class StyleRulePage; 71 class StyleRulePage;
71 class ViewportStyleResolver; 72 class ViewportStyleResolver;
72 73
73 struct MatchResult; 74 struct MatchResult;
74 75
75 enum StyleSharingBehavior { 76 enum StyleSharingBehavior {
76 AllowStyleSharing, 77 AllowStyleSharing,
77 DisallowStyleSharing, 78 DisallowStyleSharing,
78 }; 79 };
79 80
80 // MatchOnlyUserAgentRules is used in media queries, where relative units 81 // MatchOnlyUserAgentRules is used in media queries, where relative units
81 // are interpreted according to the document root element style, and styled only 82 // are interpreted according to the document root element style, and styled only
82 // from the User Agent Stylesheet rules. 83 // from the User Agent Stylesheet rules.
83 enum RuleMatchingBehavior { 84 enum RuleMatchingBehavior {
84 MatchAllRules, 85 MatchAllRules,
85 MatchAllRulesExcludingSMIL, 86 MatchAllRulesExcludingSMIL,
86 MatchOnlyUserAgentRules, 87 MatchOnlyUserAgentRules,
87 }; 88 };
88 89
89 const unsigned styleSharingListSize = 40; 90 const unsigned styleSharingListSize = 40;
90 typedef WTF::Deque<Element*, styleSharingListSize> StyleSharingList; 91 typedef WTF::Deque<Element*, styleSharingListSize> StyleSharingList;
91 92
92 #undef STYLE_STATS
93
94 #ifdef STYLE_STATS
95 struct StyleSharingStats {
96 void addSearch() { ++m_searches; ++m_totalSearches; }
97 void addElementEligibleForSharing() { ++m_elementsEligibleForSharing; ++m_to talElementsEligibleForSharing; }
98 void addStyleShared() { ++m_stylesShared; ++m_totalStylesShared; }
99 void addSearchFoundSiblingForSharing() { ++m_searchFoundSiblingForSharing; + +m_totalSearchFoundSiblingForSharing; }
100 void addSearchMissedSharing() { ++m_searchesMissedSharing; ++m_totalSearches MissedSharing; }
101 void addMatchedPropertiesSearch() { ++m_matchedPropertiesSearches; ++m_total MatchedPropertiesSearches; }
102 void addMatchedPropertiesHit() { ++m_matchedPropertiesHit; ++m_totalMatchedP ropertiesHit; }
103 void addMatchedPropertiesHitSharedInherited() { ++m_matchedPropertiesSharedI nheritedHit; ++m_totalMatchedPropertiesSharedInheritedHit; }
104 void addMatchedPropertiesToCache() { ++m_matchedPropertiesToCache; ++m_total MatchedPropertiesToCache; }
105 void addMatchedPropertiesEnteredIntoCache() { ++m_matchedPropertiesEnteredIn toCache; ++m_totalMatchedPropertiesEnteredIntoCache; }
106
107 void clear()
108 {
109 m_searches = m_elementsEligibleForSharing = m_stylesShared = m_searchesM issedSharing = m_searchFoundSiblingForSharing =
110 m_matchedPropertiesSearches = m_matchedPropertiesHit = m_matchedProp ertiesSharedInheritedHit = m_matchedPropertiesToCache =
111 m_matchedPropertiesEnteredIntoCache = 0;
112 }
113
114 void printStats() const;
115
116 unsigned m_searches;
117 unsigned m_elementsEligibleForSharing;
118 unsigned m_stylesShared;
119 unsigned m_searchFoundSiblingForSharing;
120 unsigned m_searchesMissedSharing;
121 unsigned m_matchedPropertiesSearches;
122 unsigned m_matchedPropertiesHit;
123 unsigned m_matchedPropertiesSharedInheritedHit;
124 unsigned m_matchedPropertiesToCache;
125 unsigned m_matchedPropertiesEnteredIntoCache;
126
127 unsigned m_totalSearches;
128 unsigned m_totalElementsEligibleForSharing;
129 unsigned m_totalStylesShared;
130 unsigned m_totalSearchFoundSiblingForSharing;
131 unsigned m_totalSearchesMissedSharing;
132 unsigned m_totalMatchedPropertiesSearches;
133 unsigned m_totalMatchedPropertiesHit;
134 unsigned m_totalMatchedPropertiesSharedInheritedHit;
135 unsigned m_totalMatchedPropertiesToCache;
136 unsigned m_totalMatchedPropertiesEnteredIntoCache;
137 };
138
139 #define STYLE_STATS_ADD_SEARCH() StyleResolver::styleSharingStats().addSearch();
140 #define STYLE_STATS_ADD_ELEMENT_ELIGIBLE_FOR_SHARING() StyleResolver::styleShari ngStats().addElementEligibleForSharing();
141 #define STYLE_STATS_ADD_STYLE_SHARED() StyleResolver::styleSharingStats().addSty leShared();
142 #define STYLE_STATS_ADD_SEARCH_FOUND_SIBLING_FOR_SHARING() StyleResolver::styleS haringStats().addSearchFoundSiblingForSharing();
143 #define STYLE_STATS_ADD_SEARCH_MISSED_SHARING() StyleResolver::styleSharingStats ().addSearchMissedSharing();
144 #define STYLE_STATS_PRINT() StyleResolver::styleSharingStats().printStats();
145 #define STYLE_STATS_CLEAR() StyleResolver::styleSharingStats().clear();
146 #define STYLE_STATS_ADD_MATCHED_PROPERTIES_SEARCH() StyleResolver::styleSharingS tats().addMatchedPropertiesSearch();
147 #define STYLE_STATS_ADD_MATCHED_PROPERTIES_HIT() StyleResolver::styleSharingStat s().addMatchedPropertiesHit();
148 #define STYLE_STATS_ADD_MATCHED_PROPERTIES_HIT_SHARED_INHERITED() StyleResolver: :styleSharingStats().addMatchedPropertiesHitSharedInherited();
149 #define STYLE_STATS_ADD_MATCHED_PROPERTIES_TO_CACHE() StyleResolver::styleSharin gStats().addMatchedPropertiesToCache();
150 #define STYLE_STATS_ADD_MATCHED_PROPERTIES_ENTERED_INTO_CACHE() StyleResolver::s tyleSharingStats().addMatchedPropertiesEnteredIntoCache();
151 #else
152 #define STYLE_STATS_ADD_SEARCH() (void(0));
153 #define STYLE_STATS_ADD_ELEMENT_ELIGIBLE_FOR_SHARING() (void(0));
154 #define STYLE_STATS_ADD_STYLE_SHARED() (void(0));
155 #define STYLE_STATS_ADD_SEARCH_FOUND_SIBLING_FOR_SHARING() (void(0));
156 #define STYLE_STATS_ADD_SEARCH_MISSED_SHARING() (void(0));
157 #define STYLE_STATS_PRINT() (void(0));
158 #define STYLE_STATS_CLEAR() (void(0));
159 #define STYLE_STATS_ADD_MATCHED_PROPERTIES_SEARCH() (void(0));
160 #define STYLE_STATS_ADD_MATCHED_PROPERTIES_HIT() (void(0));
161 #define STYLE_STATS_ADD_MATCHED_PROPERTIES_HIT_SHARED_INHERITED() (void(0));
162 #define STYLE_STATS_ADD_MATCHED_PROPERTIES_TO_CACHE() (void(0));
163 #define STYLE_STATS_ADD_MATCHED_PROPERTIES_ENTERED_INTO_CACHE() (void(0));
164 #endif
165
166 struct CSSPropertyValue { 93 struct CSSPropertyValue {
167 CSSPropertyValue(CSSPropertyID property, CSSValue* value) 94 CSSPropertyValue(CSSPropertyID property, CSSValue* value)
168 : property(property), value(value) { } 95 : property(property), value(value) { }
169 // Stores value=propertySet.getPropertyCSSValue(id).get(). 96 // Stores value=propertySet.getPropertyCSSValue(id).get().
170 CSSPropertyValue(CSSPropertyID, const StylePropertySet&); 97 CSSPropertyValue(CSSPropertyID, const StylePropertySet&);
171 CSSPropertyID property; 98 CSSPropertyID property;
172 CSSValue* value; 99 CSSValue* value;
173 }; 100 };
174 101
175 // This class selects a RenderStyle for a given element based on a collection of stylesheets. 102 // This class selects a RenderStyle for a given element based on a collection of stylesheets.
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
273 200
274 const RuleFeatureSet& ruleFeatureSet() const { return m_features; } 201 const RuleFeatureSet& ruleFeatureSet() const { return m_features; }
275 202
276 StyleSharingList& styleSharingList() { return m_styleSharingList; } 203 StyleSharingList& styleSharingList() { return m_styleSharingList; }
277 204
278 bool hasRulesForId(const AtomicString&) const; 205 bool hasRulesForId(const AtomicString&) const;
279 206
280 void addToStyleSharingList(Element&); 207 void addToStyleSharingList(Element&);
281 void clearStyleSharingList(); 208 void clearStyleSharingList();
282 209
283 #ifdef STYLE_STATS 210 StyleResolverStats* stats() { return m_styleResolverStats.get(); }
284 ALWAYS_INLINE static StyleSharingStats& styleSharingStats() { return m_style SharingStats; } 211 StyleResolverStats* statsTotals() { return m_styleResolverStatsTotals.get(); }
285 #endif 212 enum StatsReportType { ReportDefaultStats, ReportSlowStats };
213 void enableStats(StatsReportType = ReportDefaultStats);
214 void disableStats();
215 void printStats();
286 216
287 private: 217 private:
288 // FontSelectorClient implementation. 218 // FontSelectorClient implementation.
289 virtual void fontsNeedUpdate(FontSelector*); 219 virtual void fontsNeedUpdate(FontSelector*);
290 220
291 private: 221 private:
292 void initWatchedSelectorRules(const Vector<RefPtr<StyleRule> >& watchedSelec tors); 222 void initWatchedSelectorRules(const Vector<RefPtr<StyleRule> >& watchedSelec tors);
293 223
294 // FIXME: This should probably go away, folded into FontBuilder. 224 // FIXME: This should probably go away, folded into FontBuilder.
295 void updateFont(StyleResolverState&); 225 void updateFont(StyleResolverState&);
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
366 // FIXME: watched selectors should be implemented using injected author styl esheets: http://crbug.com/316960 296 // FIXME: watched selectors should be implemented using injected author styl esheets: http://crbug.com/316960
367 OwnPtr<RuleSet> m_watchedSelectorsRules; 297 OwnPtr<RuleSet> m_watchedSelectorsRules;
368 TreeBoundaryCrossingRules m_treeBoundaryCrossingRules; 298 TreeBoundaryCrossingRules m_treeBoundaryCrossingRules;
369 299
370 InspectorCSSOMWrappers m_inspectorCSSOMWrappers; 300 InspectorCSSOMWrappers m_inspectorCSSOMWrappers;
371 301
372 StyleResourceLoader m_styleResourceLoader; 302 StyleResourceLoader m_styleResourceLoader;
373 303
374 StyleSharingList m_styleSharingList; 304 StyleSharingList m_styleSharingList;
375 305
376 #ifdef STYLE_STATS 306 OwnPtr<StyleResolverStats> m_styleResolverStats;
377 static StyleSharingStats m_styleSharingStats; 307 OwnPtr<StyleResolverStats> m_styleResolverStatsTotals;
378 #endif 308 unsigned m_styleResolverStatsSequence;
379 }; 309 };
380 310
381 inline bool checkRegionSelector(const CSSSelector* regionSelector, Element* regi onElement) 311 inline bool checkRegionSelector(const CSSSelector* regionSelector, Element* regi onElement)
382 { 312 {
383 if (!regionSelector || !regionElement) 313 if (!regionSelector || !regionElement)
384 return false; 314 return false;
385 315
386 SelectorChecker selectorChecker(regionElement->document(), SelectorChecker:: QueryingRules); 316 SelectorChecker selectorChecker(regionElement->document(), SelectorChecker:: QueryingRules);
387 for (const CSSSelector* s = regionSelector; s; s = CSSSelectorList::next(s)) { 317 for (const CSSSelector* s = regionSelector; s; s = CSSSelectorList::next(s)) {
388 SelectorChecker::SelectorCheckingContext selectorCheckingContext(s, regi onElement, SelectorChecker::VisitedMatchDisabled); 318 SelectorChecker::SelectorCheckingContext selectorCheckingContext(s, regi onElement, SelectorChecker::VisitedMatchDisabled);
389 PseudoId ignoreDynamicPseudo = NOPSEUDO; 319 PseudoId ignoreDynamicPseudo = NOPSEUDO;
390 if (selectorChecker.match(selectorCheckingContext, ignoreDynamicPseudo, DOMSiblingTraversalStrategy()) == SelectorChecker::SelectorMatches) 320 if (selectorChecker.match(selectorCheckingContext, ignoreDynamicPseudo, DOMSiblingTraversalStrategy()) == SelectorChecker::SelectorMatches)
391 return true; 321 return true;
392 } 322 }
393 return false; 323 return false;
394 } 324 }
395 325
396 } // namespace WebCore 326 } // namespace WebCore
397 327
398 #endif // StyleResolver_h 328 #endif // StyleResolver_h
OLDNEW
« no previous file with comments | « Source/core/css/resolver/SharedStyleFinder.cpp ('k') | Source/core/css/resolver/StyleResolver.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698