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

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

Issue 42543007: StyleResolver should update RuleSets lazily. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 7 years, 2 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
OLDNEW
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, 2013 Apple Inc. All rights reserved. 5 * Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013 Apple Inc. All rights 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 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
50 #include "core/css/CSSRuleList.h" 50 #include "core/css/CSSRuleList.h"
51 #include "core/css/CSSSelector.h" 51 #include "core/css/CSSSelector.h"
52 #include "core/css/CSSStyleRule.h" 52 #include "core/css/CSSStyleRule.h"
53 #include "core/css/CSSValueList.h" 53 #include "core/css/CSSValueList.h"
54 #include "core/css/CSSVariableValue.h" 54 #include "core/css/CSSVariableValue.h"
55 #include "core/css/ElementRuleCollector.h" 55 #include "core/css/ElementRuleCollector.h"
56 #include "core/css/MediaQueryEvaluator.h" 56 #include "core/css/MediaQueryEvaluator.h"
57 #include "core/css/PageRuleCollector.h" 57 #include "core/css/PageRuleCollector.h"
58 #include "core/css/RuleSet.h" 58 #include "core/css/RuleSet.h"
59 #include "core/css/StylePropertySet.h" 59 #include "core/css/StylePropertySet.h"
60 #include "core/css/StyleRuleImport.h"
61 #include "core/css/StyleSheetContents.h"
60 #include "core/css/resolver/AnimatedStyleBuilder.h" 62 #include "core/css/resolver/AnimatedStyleBuilder.h"
61 #include "core/css/resolver/MatchResult.h" 63 #include "core/css/resolver/MatchResult.h"
62 #include "core/css/resolver/MediaQueryResult.h" 64 #include "core/css/resolver/MediaQueryResult.h"
63 #include "core/css/resolver/SharedStyleFinder.h" 65 #include "core/css/resolver/SharedStyleFinder.h"
64 #include "core/css/resolver/StyleAdjuster.h" 66 #include "core/css/resolver/StyleAdjuster.h"
65 #include "core/css/resolver/StyleBuilder.h" 67 #include "core/css/resolver/StyleBuilder.h"
66 #include "core/css/resolver/ViewportStyleResolver.h" 68 #include "core/css/resolver/ViewportStyleResolver.h"
67 #include "core/dom/CSSSelectorWatch.h" 69 #include "core/dom/CSSSelectorWatch.h"
68 #include "core/dom/NodeRenderStyle.h" 70 #include "core/dom/NodeRenderStyle.h"
69 #include "core/dom/StyleEngine.h" 71 #include "core/dom/StyleEngine.h"
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
132 rightToLeftDecl->setProperty(CSSPropertyDirection, CSSValueRtl); 134 rightToLeftDecl->setProperty(CSSPropertyDirection, CSSValueRtl);
133 return rightToLeftDecl.get(); 135 return rightToLeftDecl.get();
134 } 136 }
135 137
136 StyleResolver::StyleResolver(Document& document, bool matchAuthorAndUserStyles) 138 StyleResolver::StyleResolver(Document& document, bool matchAuthorAndUserStyles)
137 : m_document(document) 139 : m_document(document)
138 , m_matchAuthorAndUserStyles(matchAuthorAndUserStyles) 140 , m_matchAuthorAndUserStyles(matchAuthorAndUserStyles)
139 , m_fontSelector(CSSFontSelector::create(&document)) 141 , m_fontSelector(CSSFontSelector::create(&document))
140 , m_viewportStyleResolver(ViewportStyleResolver::create(&document)) 142 , m_viewportStyleResolver(ViewportStyleResolver::create(&document))
141 , m_styleResourceLoader(document.fetcher()) 143 , m_styleResourceLoader(document.fetcher())
144 , m_needCollectFeatures(false)
142 { 145 {
143 Element* root = document.documentElement(); 146 Element* root = document.documentElement();
144 147
145 m_fontSelector->registerForInvalidationCallbacks(this); 148 m_fontSelector->registerForInvalidationCallbacks(this);
146 149
147 CSSDefaultStyleSheets::initDefaultStyle(root); 150 CSSDefaultStyleSheets::initDefaultStyle(root);
148 151
149 // construct document root element default style. this is needed 152 // construct document root element default style. this is needed
150 // to evaluate media queries that contain relative constraints, like "screen and (max-width: 10em)" 153 // to evaluate media queries that contain relative constraints, like "screen and (max-width: 10em)"
151 // This is here instead of constructor, because when constructor is run, 154 // This is here instead of constructor, because when constructor is run,
(...skipping 22 matching lines...) Expand all
174 const HashSet<SVGFontFaceElement*>& svgFontFaceElements = document.svgEx tensions()->svgFontFaceElements(); 177 const HashSet<SVGFontFaceElement*>& svgFontFaceElements = document.svgEx tensions()->svgFontFaceElements();
175 HashSet<SVGFontFaceElement*>::const_iterator end = svgFontFaceElements.e nd(); 178 HashSet<SVGFontFaceElement*>::const_iterator end = svgFontFaceElements.e nd();
176 for (HashSet<SVGFontFaceElement*>::const_iterator it = svgFontFaceElemen ts.begin(); it != end; ++it) 179 for (HashSet<SVGFontFaceElement*>::const_iterator it = svgFontFaceElemen ts.begin(); it != end; ++it)
177 fontSelector()->addFontFaceRule((*it)->fontFaceRule()); 180 fontSelector()->addFontFaceRule((*it)->fontFaceRule());
178 } 181 }
179 #endif 182 #endif
180 183
181 styleSheetCollection->appendActiveAuthorStyleSheets(this); 184 styleSheetCollection->appendActiveAuthorStyleSheets(this);
182 } 185 }
183 186
187 bool rulesHaveViewportOrFontFaceRule(const Vector<RefPtr<StyleRuleBase> >& rules )
esprehn 2013/10/25 02:37:58 These are missing static.
tasak 2013/10/25 10:10:10 Yeah, thanks. Done.
188 {
189 for (unsigned i = 0; i < rules.size(); ++i) {
190 StyleRuleBase* rule = rules[i].get();
191 if (rule->isFontFaceRule() || rule->isViewportRule())
192 return true;
193 }
194 return false;
195 }
196
197 bool styleSheetHasViewportOrFontFaceRule(StyleSheetContents* sheet)
esprehn 2013/10/25 02:37:58 static
tasak 2013/10/25 10:10:10 Done.
198 {
199 if (!sheet)
200 return false;
201
202 if (sheet->importRules().size() > 0) {
203 const Vector<RefPtr<StyleRuleImport> >& importRules = sheet->importRules ();
204 for (unsigned i = 0; i < importRules.size(); ++i) {
205 StyleRuleImport* importRule = importRules[i].get();
206 if (styleSheetHasViewportOrFontFaceRule(importRule->styleSheet()))
207 return true;
208 }
209 }
210 return rulesHaveViewportOrFontFaceRule(sheet->childRules());
211 }
212
213 bool canAppendAuthorStyleSheetsLazily(unsigned firstNew, const Vector<RefPtr<CSS StyleSheet> >& styleSheets)
esprehn 2013/10/25 02:37:58 static
tasak 2013/10/25 10:10:10 Done.
214 {
215 unsigned size = styleSheets.size();
216 for (unsigned i = firstNew; i < size; ++i) {
217 if (styleSheetHasViewportOrFontFaceRule(styleSheets[i]->contents()))
218 return false;
219 }
220 return true;
221 }
222
223 void StyleResolver::lazyAppendAuthorStyleSheets(unsigned firstNew, const Vector< RefPtr<CSSStyleSheet> >& styleSheets)
224 {
225 // We cannot lazy apppend stylesheets if the sheets have @viewport and @font -face rules.
esprehn 2013/10/25 02:37:58 extra p in append. Also why can't we lazy append t
tasak 2013/10/25 10:10:10 Yeah, I agree that we should solve in a future pat
226 bool canLazyAppend = canAppendAuthorStyleSheetsLazily(firstNew, styleSheets) ;
227
228 unsigned size = styleSheets.size();
229 for (unsigned i = firstNew; i < size; ++i)
230 m_pendingStyleSheets.add(styleSheets[i].get());
231
232 if (!canLazyAppend)
233 appendPendingAuthorStyleSheets();
234 }
235
236 void StyleResolver::removePendingAuthorStyleSheets(const Vector<RefPtr<CSSStyleS heet> >& styleSheets)
237 {
238 for (unsigned i = i; i < styleSheets.size(); ++i)
239 m_pendingStyleSheets.remove(styleSheets[i].get());
240 }
241
242 void StyleResolver::appendPendingAuthorStyleSheets()
243 {
244 setBuildScopedStyleTreeInDocumentOrder(false);
245 for (ListHashSet<CSSStyleSheet*, 16>::iterator it = m_pendingStyleSheets.beg in(); it != m_pendingStyleSheets.end(); ++it) {
246 CSSStyleSheet* cssSheet = *it;
247 ASSERT(!cssSheet->disabled());
248 if (cssSheet->mediaQueries() && !m_medium->eval(cssSheet->mediaQueries() , &m_viewportDependentMediaQueryResults))
249 continue;
250
251 StyleSheetContents* sheet = cssSheet->contents();
252 const ContainerNode* scopingNode = ScopedStyleResolver::scopingNodeFor(c ssSheet);
253 if (!scopingNode && cssSheet->ownerNode() && cssSheet->ownerNode()->isIn ShadowTree())
254 continue;
esprehn 2013/10/25 02:37:58 What's this case for?
tasak 2013/10/25 10:10:10 c.f. fast/dom/shadow/remove-styles-in-shadow-crash
255
256 ScopedStyleResolver* resolver = ensureScopedStyleResolver(scopingNode);
257 ASSERT(resolver);
258 resolver->addRulesFromSheet(sheet, *m_medium, this);
259 m_inspectorCSSOMWrappers.collectFromStyleSheetIfNeeded(cssSheet);
260 }
261 m_pendingStyleSheets.clear();
262 finishAppendAuthorStyleSheets();
263 }
264
184 void StyleResolver::appendAuthorStyleSheets(unsigned firstNew, const Vector<RefP tr<CSSStyleSheet> >& styleSheets) 265 void StyleResolver::appendAuthorStyleSheets(unsigned firstNew, const Vector<RefP tr<CSSStyleSheet> >& styleSheets)
185 { 266 {
186 // This handles sheets added to the end of the stylesheet list only. In othe r cases the style resolver 267 // This handles sheets added to the end of the stylesheet list only. In othe r cases the style resolver
187 // needs to be reconstructed. To handle insertions too the rule order number s would need to be updated. 268 // needs to be reconstructed. To handle insertions too the rule order number s would need to be updated.
188 unsigned size = styleSheets.size(); 269 unsigned size = styleSheets.size();
189 for (unsigned i = firstNew; i < size; ++i) { 270 for (unsigned i = firstNew; i < size; ++i) {
190 CSSStyleSheet* cssSheet = styleSheets[i].get(); 271 CSSStyleSheet* cssSheet = styleSheets[i].get();
191 ASSERT(!cssSheet->disabled()); 272 ASSERT(!cssSheet->disabled());
192 if (cssSheet->mediaQueries() && !m_medium->eval(cssSheet->mediaQueries() , &m_viewportDependentMediaQueryResults)) 273 if (cssSheet->mediaQueries() && !m_medium->eval(cssSheet->mediaQueries() , &m_viewportDependentMediaQueryResults))
193 continue; 274 continue;
(...skipping 11 matching lines...) Expand all
205 } 286 }
206 287
207 void StyleResolver::finishAppendAuthorStyleSheets() 288 void StyleResolver::finishAppendAuthorStyleSheets()
208 { 289 {
209 collectFeatures(); 290 collectFeatures();
210 291
211 if (document().renderer() && document().renderer()->style()) 292 if (document().renderer() && document().renderer()->style())
212 document().renderer()->style()->font().update(fontSelector()); 293 document().renderer()->style()->font().update(fontSelector());
213 294
214 collectViewportRules(); 295 collectViewportRules();
296
297 document().styleEngine()->resetCSSFeatureFlags(ruleFeatureSet());
298 }
299
300 void StyleResolver::resetRuleFeatures()
301 {
302 // Need to recreate RuleFeatureSet.
303 m_features.clear();
304 m_siblingRuleSet.clear();
305 m_uncommonAttributeRuleSet.clear();
306 m_needCollectFeatures = true;
215 } 307 }
216 308
217 void StyleResolver::resetAuthorStyle(const ContainerNode* scopingNode) 309 void StyleResolver::resetAuthorStyle(const ContainerNode* scopingNode)
218 { 310 {
219 // FIXME: When chanking scoped attribute, scopingNode's hasScopedHTMLStyleCh ild has been already modified. 311 // FIXME: When chanking scoped attribute, scopingNode's hasScopedHTMLStyleCh ild has been already modified.
220 // So we cannot use hasScopedHTMLStyleChild flag here. 312 // So we cannot use hasScopedHTMLStyleChild flag here.
221 ScopedStyleResolver* resolver = scopingNode ? m_styleTree.lookupScopedStyleR esolverFor(scopingNode) : m_styleTree.scopedStyleResolverForDocument(); 313 ScopedStyleResolver* resolver = scopingNode ? m_styleTree.lookupScopedStyleR esolverFor(scopingNode) : m_styleTree.scopedStyleResolverForDocument();
222 if (!resolver) 314 if (!resolver)
223 return; 315 return;
224 316
225 m_ruleSets.shadowDistributedRules().reset(scopingNode); 317 m_ruleSets.shadowDistributedRules().reset(scopingNode);
226 318
227 resolver->resetAuthorStyle(); 319 resolver->resetAuthorStyle();
320 resetRuleFeatures();
228 if (!scopingNode) 321 if (!scopingNode)
229 return; 322 return;
230 323
231 if (scopingNode->isShadowRoot()) 324 if (scopingNode->isShadowRoot())
232 resetAtHostRules(scopingNode); 325 resetAtHostRules(scopingNode);
233 326
234 if (!resolver->hasOnlyEmptyRuleSets()) 327 if (!resolver->hasOnlyEmptyRuleSets())
235 return; 328 return;
236 329
237 m_styleTree.remove(scopingNode); 330 m_styleTree.remove(scopingNode);
(...skipping 30 matching lines...) Expand all
268 } 361 }
269 362
270 void StyleResolver::collectFeatures() 363 void StyleResolver::collectFeatures()
271 { 364 {
272 m_features.clear(); 365 m_features.clear();
273 m_ruleSets.collectFeaturesTo(m_features, document().isViewSource()); 366 m_ruleSets.collectFeaturesTo(m_features, document().isViewSource());
274 m_styleTree.collectFeaturesTo(m_features); 367 m_styleTree.collectFeaturesTo(m_features);
275 368
276 m_siblingRuleSet = makeRuleSet(m_features.siblingRules); 369 m_siblingRuleSet = makeRuleSet(m_features.siblingRules);
277 m_uncommonAttributeRuleSet = makeRuleSet(m_features.uncommonAttributeRules); 370 m_uncommonAttributeRuleSet = makeRuleSet(m_features.uncommonAttributeRules);
371 m_needCollectFeatures = false;
278 } 372 }
279 373
280 bool StyleResolver::hasRulesForId(const AtomicString& id) const 374 bool StyleResolver::hasRulesForId(const AtomicString& id) const
281 { 375 {
282 return m_features.idsInRules.contains(id.impl()); 376 return m_features.idsInRules.contains(id.impl());
283 } 377 }
284 378
285 void StyleResolver::addToStyleSharingList(Element* element) 379 void StyleResolver::addToStyleSharingList(Element* element)
286 { 380 {
287 if (m_styleSharingList.size() >= styleSharingListSize) 381 if (m_styleSharingList.size() >= styleSharingListSize)
(...skipping 306 matching lines...) Expand 10 before | Expand all | Expand 10 after
594 { 688 {
595 for (size_t i = 0; i < contentAttrValues.size(); ++i) 689 for (size_t i = 0; i < contentAttrValues.size(); ++i)
596 features.attrsInRules.add(contentAttrValues[i].impl()); 690 features.attrsInRules.add(contentAttrValues[i].impl());
597 } 691 }
598 692
599 PassRefPtr<RenderStyle> StyleResolver::styleForElement(Element* element, RenderS tyle* defaultParent, StyleSharingBehavior sharingBehavior, 693 PassRefPtr<RenderStyle> StyleResolver::styleForElement(Element* element, RenderS tyle* defaultParent, StyleSharingBehavior sharingBehavior,
600 RuleMatchingBehavior matchingBehavior, RenderRegion* regionForStyling) 694 RuleMatchingBehavior matchingBehavior, RenderRegion* regionForStyling)
601 { 695 {
602 ASSERT(document().frame()); 696 ASSERT(document().frame());
603 ASSERT(documentSettings()); 697 ASSERT(documentSettings());
698 ASSERT(!hasPendingAuthorStyleSheets());
699 ASSERT(!m_needCollectFeatures);
604 700
605 // Once an element has a renderer, we don't try to destroy it, since otherwi se the renderer 701 // Once an element has a renderer, we don't try to destroy it, since otherwi se the renderer
606 // will vanish if a style recalc happens during loading. 702 // will vanish if a style recalc happens during loading.
607 if (sharingBehavior == AllowStyleSharing && !element->document().haveStylesh eetsLoaded() && !element->renderer()) { 703 if (sharingBehavior == AllowStyleSharing && !element->document().haveStylesh eetsLoaded() && !element->renderer()) {
608 if (!s_styleNotYetAvailable) { 704 if (!s_styleNotYetAvailable) {
609 s_styleNotYetAvailable = RenderStyle::create().leakRef(); 705 s_styleNotYetAvailable = RenderStyle::create().leakRef();
610 s_styleNotYetAvailable->setDisplay(NONE); 706 s_styleNotYetAvailable->setDisplay(NONE);
611 s_styleNotYetAvailable->font().update(m_fontSelector); 707 s_styleNotYetAvailable->font().update(m_fontSelector);
612 } 708 }
613 element->document().setHasNodesWithPlaceholderStyle(); 709 element->document().setHasNodesWithPlaceholderStyle();
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
690 element->ensureActiveAnimations()->cssAnimations().setPendingUpdate(stat e.takeAnimationUpdate()); 786 element->ensureActiveAnimations()->cssAnimations().setPendingUpdate(stat e.takeAnimationUpdate());
691 787
692 // Now return the style. 788 // Now return the style.
693 return state.takeStyle(); 789 return state.takeStyle();
694 } 790 }
695 791
696 PassRefPtr<RenderStyle> StyleResolver::styleForKeyframe(Element* e, const Render Style* elementStyle, const StyleKeyframe* keyframe) 792 PassRefPtr<RenderStyle> StyleResolver::styleForKeyframe(Element* e, const Render Style* elementStyle, const StyleKeyframe* keyframe)
697 { 793 {
698 ASSERT(document().frame()); 794 ASSERT(document().frame());
699 ASSERT(documentSettings()); 795 ASSERT(documentSettings());
796 ASSERT(!hasPendingAuthorStyleSheets());
700 797
701 if (e == document().documentElement()) 798 if (e == document().documentElement())
702 resetDirectionAndWritingModeOnDocument(document()); 799 resetDirectionAndWritingModeOnDocument(document());
703 StyleResolverState state(document(), e); 800 StyleResolverState state(document(), e);
704 801
705 MatchResult result; 802 MatchResult result;
706 if (keyframe->properties()) 803 if (keyframe->properties())
707 result.addMatchedProperties(keyframe->properties()); 804 result.addMatchedProperties(keyframe->properties());
708 805
709 ASSERT(!state.style()); 806 ASSERT(!state.style());
(...skipping 324 matching lines...) Expand 10 before | Expand all | Expand 10 after
1034 } 1131 }
1035 1132
1036 document().didAccessStyleResolver(); 1133 document().didAccessStyleResolver();
1037 1134
1038 // Now return the style. 1135 // Now return the style.
1039 return state.takeStyle(); 1136 return state.takeStyle();
1040 } 1137 }
1041 1138
1042 PassRefPtr<RenderStyle> StyleResolver::styleForPage(int pageIndex) 1139 PassRefPtr<RenderStyle> StyleResolver::styleForPage(int pageIndex)
1043 { 1140 {
1141 ASSERT(!hasPendingAuthorStyleSheets());
1044 resetDirectionAndWritingModeOnDocument(document()); 1142 resetDirectionAndWritingModeOnDocument(document());
1045 StyleResolverState state(document(), document().documentElement()); // m_roo tElementStyle will be set to the document style. 1143 StyleResolverState state(document(), document().documentElement()); // m_roo tElementStyle will be set to the document style.
1046 1144
1047 state.setStyle(RenderStyle::create()); 1145 state.setStyle(RenderStyle::create());
1048 const RenderStyle* rootElementStyle = state.rootElementStyle() ? state.rootE lementStyle() : document().renderStyle(); 1146 const RenderStyle* rootElementStyle = state.rootElementStyle() ? state.rootE lementStyle() : document().renderStyle();
1049 ASSERT(rootElementStyle); 1147 ASSERT(rootElementStyle);
1050 state.style()->inheritFrom(rootElementStyle); 1148 state.style()->inheritFrom(rootElementStyle);
1051 1149
1052 state.fontBuilder().initForStyleResolve(state.document(), state.style(), sta te.useSVGZoomRules()); 1150 state.fontBuilder().initForStyleResolve(state.document(), state.style(), sta te.useSVGZoomRules());
1053 1151
(...skipping 513 matching lines...) Expand 10 before | Expand all | Expand 10 after
1567 m_matchedPropertiesSearches, m_matchedPropertiesHit, m_matchedProperties SharedInheritedHit, m_matchedPropertiesToCache, m_matchedPropertiesEnteredIntoCa che); 1665 m_matchedPropertiesSearches, m_matchedPropertiesHit, m_matchedProperties SharedInheritedHit, m_matchedPropertiesToCache, m_matchedPropertiesEnteredIntoCa che);
1568 1666
1569 fprintf(stderr, "Total:\n"); 1667 fprintf(stderr, "Total:\n");
1570 printStyleStats(m_totalSearches, m_totalElementsEligibleForSharing, m_totalS tylesShared, m_totalSearchFoundSiblingForSharing, m_totalSearchesMissedSharing, 1668 printStyleStats(m_totalSearches, m_totalElementsEligibleForSharing, m_totalS tylesShared, m_totalSearchFoundSiblingForSharing, m_totalSearchesMissedSharing,
1571 m_totalMatchedPropertiesSearches, m_totalMatchedPropertiesHit, m_totalMa tchedPropertiesSharedInheritedHit, m_totalMatchedPropertiesToCache, m_totalMatch edPropertiesEnteredIntoCache); 1669 m_totalMatchedPropertiesSearches, m_totalMatchedPropertiesHit, m_totalMa tchedPropertiesSharedInheritedHit, m_totalMatchedPropertiesToCache, m_totalMatch edPropertiesEnteredIntoCache);
1572 fprintf(stderr, "----------------------------------------------------------- ---------------------\n"); 1670 fprintf(stderr, "----------------------------------------------------------- ---------------------\n");
1573 } 1671 }
1574 #endif 1672 #endif
1575 1673
1576 } // namespace WebCore 1674 } // namespace WebCore
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698