Changeset 141373 in webkit
- Timestamp:
- Jan 30, 2013 9:03:58 PM (11 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r141371 r141373 1 2013-01-30 Hayato Ito <hayato@chromium.org> 2 3 Split CSSOMWrapper data and functions out from StyleResolver into its own class. 4 https://bugs.webkit.org/show_bug.cgi?id=107779 5 6 Reviewed by Dimitri Glazkov. 7 8 Factored CSSOMWrapper logic and data out from StyleResolver into a 9 InspectorCSSOMWrappers class. Since InspectorCSSOMWrappers 10 depends on static variables defined in StyleResolver.cpp, this 11 patch does not extract a new class into a new file, which makes a 12 review easier since it produces readable diffs. 13 14 After we factor static variables related to default style sheets 15 in a following patch (bug 107780), I'll move 16 InspectorCSSOMWrappers into a its own file. 17 18 No new tests, refactoring only. 19 20 * css/StyleResolver.cpp: 21 (WebCore): 22 (WebCore::StyleResolver::appendAuthorStyleSheets): 23 (WebCore::InspectorCSSOMWrappers::collectFromStyleSheetIfNeeded): 24 (WebCore::InspectorCSSOMWrappers::collect): 25 (WebCore::InspectorCSSOMWrappers::collectFromStyleSheetContents): Name it explicitly rather than overloading. 26 (WebCore::InspectorCSSOMWrappers::collectFromStyleSheets): Name it explicitly rather than overloading. 27 (WebCore::InspectorCSSOMWrappers::collectFromDocumentStyleSheetCollection): Name it explicitly rather than overloading. 28 (WebCore::InspectorCSSOMWrappers::getWrapperForRuleInSheets): Renamed from ensureFullCSSOMWrapperForInspector(). 29 (WebCore::InspectorCSSOMWrappers::reportMemoryUsage): 30 (WebCore::StyleResolver::reportMemoryUsage): 31 * css/StyleResolver.h: 32 (InspectorCSSOMWrappers): 33 (WebCore): 34 (StyleResolver): 35 (WebCore::StyleResolver::inspectorCSSOMWrappers): 36 * inspector/InspectorCSSAgent.cpp: 37 (WebCore::InspectorCSSAgent::willMatchRule): 38 (WebCore::InspectorCSSAgent::willProcessRule): 39 (WebCore::InspectorCSSAgent::buildObjectForRule): 40 1 41 2013-01-30 Sheriff Bot <webkit.review.bot@gmail.com> 2 42 -
trunk/Source/WebCore/css/StyleResolver.cpp
r141280 r141373 229 229 static void loadFullDefaultStyle(); 230 230 static void loadSimpleDefaultStyle(); 231 template <class ListType>232 static void collectCSSOMWrappers(HashMap<StyleRule*, RefPtr<CSSStyleRule> >&, ListType*);233 231 234 232 // FIXME: It would be nice to use some mechanism that guarantees this is in sync with the real UA stylesheet. … … 395 393 396 394 m_authorStyle->addRulesFromSheet(sheet, *m_medium, this); 397 if (!m_styleRuleToCSSOMWrapperMap.isEmpty()) 398 collectCSSOMWrappers(m_styleRuleToCSSOMWrapperMap, cssSheet); 395 m_inspectorCSSOMWrappers.collectFromStyleSheetIfNeeded(cssSheet); 399 396 } 400 397 m_authorStyle->shrinkToFit(); … … 2676 2673 } 2677 2674 2675 void InspectorCSSOMWrappers::collectFromStyleSheetIfNeeded(CSSStyleSheet* styleSheet) 2676 { 2677 if (!m_styleRuleToCSSOMWrapperMap.isEmpty()) 2678 collect(styleSheet); 2679 } 2680 2678 2681 template <class ListType> 2679 static void collectCSSOMWrappers(HashMap<StyleRule*, RefPtr<CSSStyleRule> >& wrapperMap,ListType* listType)2682 void InspectorCSSOMWrappers::collect(ListType* listType) 2680 2683 { 2681 2684 if (!listType) … … 2686 2689 switch (cssRule->type()) { 2687 2690 case CSSRule::IMPORT_RULE: 2688 collect CSSOMWrappers(wrapperMap,static_cast<CSSImportRule*>(cssRule)->styleSheet());2691 collect(static_cast<CSSImportRule*>(cssRule)->styleSheet()); 2689 2692 break; 2690 2693 case CSSRule::MEDIA_RULE: 2691 collect CSSOMWrappers(wrapperMap,static_cast<CSSMediaRule*>(cssRule));2694 collect(static_cast<CSSMediaRule*>(cssRule)); 2692 2695 break; 2693 2696 #if ENABLE(CSS3_CONDITIONAL_RULES) 2694 2697 case CSSRule::SUPPORTS_RULE: 2695 collectCSSOMWrappers( wrapperMap,static_cast<CSSSupportsRule*>(cssRule));2698 collectCSSOMWrappers(static_cast<CSSSupportsRule*>(cssRule)); 2696 2699 break; 2697 2700 #endif 2698 2701 #if ENABLE(CSS_REGIONS) 2699 2702 case CSSRule::WEBKIT_REGION_RULE: 2700 collect CSSOMWrappers(wrapperMap,static_cast<WebKitCSSRegionRule*>(cssRule));2703 collect(static_cast<WebKitCSSRegionRule*>(cssRule)); 2701 2704 break; 2702 2705 #endif 2703 2706 #if ENABLE(SHADOW_DOM) 2704 2707 case CSSRule::HOST_RULE: 2705 collect CSSOMWrappers(wrapperMap,static_cast<CSSHostRule*>(cssRule));2708 collect(static_cast<CSSHostRule*>(cssRule)); 2706 2709 break; 2707 2710 #endif 2708 2711 case CSSRule::STYLE_RULE: 2709 wrapperMap.add(static_cast<CSSStyleRule*>(cssRule)->styleRule(), static_cast<CSSStyleRule*>(cssRule));2712 m_styleRuleToCSSOMWrapperMap.add(static_cast<CSSStyleRule*>(cssRule)->styleRule(), static_cast<CSSStyleRule*>(cssRule)); 2710 2713 break; 2711 2714 default: … … 2715 2718 } 2716 2719 2717 static void collectCSSOMWrappers(HashMap<StyleRule*, RefPtr<CSSStyleRule> >& wrapperMap,HashSet<RefPtr<CSSStyleSheet> >& sheetWrapperSet, StyleSheetContents* styleSheet)2720 void InspectorCSSOMWrappers::collectFromStyleSheetContents(HashSet<RefPtr<CSSStyleSheet> >& sheetWrapperSet, StyleSheetContents* styleSheet) 2718 2721 { 2719 2722 if (!styleSheet) … … 2721 2724 RefPtr<CSSStyleSheet> styleSheetWrapper = CSSStyleSheet::create(styleSheet); 2722 2725 sheetWrapperSet.add(styleSheetWrapper); 2723 collect CSSOMWrappers(wrapperMap,styleSheetWrapper.get());2724 } 2725 2726 static void collectCSSOMWrappers(HashMap<StyleRule*, RefPtr<CSSStyleRule> >& wrapperMap,const Vector<RefPtr<CSSStyleSheet> >& sheets)2726 collect(styleSheetWrapper.get()); 2727 } 2728 2729 void InspectorCSSOMWrappers::collectFromStyleSheets(const Vector<RefPtr<CSSStyleSheet> >& sheets) 2727 2730 { 2728 2731 for (unsigned i = 0; i < sheets.size(); ++i) 2729 collect CSSOMWrappers(wrapperMap,sheets[i].get());2730 } 2731 2732 static void collectCSSOMWrappers(HashMap<StyleRule*, RefPtr<CSSStyleRule> >& wrapperMap,DocumentStyleSheetCollection* styleSheetCollection)2733 { 2734 collect CSSOMWrappers(wrapperMap,styleSheetCollection->activeAuthorStyleSheets());2735 collect CSSOMWrappers(wrapperMap,styleSheetCollection->pageUserSheet());2736 collect CSSOMWrappers(wrapperMap,styleSheetCollection->injectedUserStyleSheets());2737 collect CSSOMWrappers(wrapperMap,styleSheetCollection->documentUserStyleSheets());2738 } 2739 2740 CSSStyleRule* StyleResolver::ensureFullCSSOMWrapperForInspector(StyleRule* rule)2732 collect(sheets[i].get()); 2733 } 2734 2735 void InspectorCSSOMWrappers::collectFromDocumentStyleSheetCollection(DocumentStyleSheetCollection* styleSheetCollection) 2736 { 2737 collectFromStyleSheets(styleSheetCollection->activeAuthorStyleSheets()); 2738 collect(styleSheetCollection->pageUserSheet()); 2739 collectFromStyleSheets(styleSheetCollection->injectedUserStyleSheets()); 2740 collectFromStyleSheets(styleSheetCollection->documentUserStyleSheets()); 2741 } 2742 2743 CSSStyleRule* InspectorCSSOMWrappers::getWrapperForRuleInSheets(StyleRule* rule, DocumentStyleSheetCollection* styleSheetCollection) 2741 2744 { 2742 2745 if (m_styleRuleToCSSOMWrapperMap.isEmpty()) { 2743 collect CSSOMWrappers(m_styleRuleToCSSOMWrapperMap,m_styleSheetCSSOMWrapperSet, simpleDefaultStyleSheet);2744 collect CSSOMWrappers(m_styleRuleToCSSOMWrapperMap,m_styleSheetCSSOMWrapperSet, defaultStyleSheet);2745 collect CSSOMWrappers(m_styleRuleToCSSOMWrapperMap,m_styleSheetCSSOMWrapperSet, quirksStyleSheet);2746 collect CSSOMWrappers(m_styleRuleToCSSOMWrapperMap,m_styleSheetCSSOMWrapperSet, svgStyleSheet);2747 collect CSSOMWrappers(m_styleRuleToCSSOMWrapperMap,m_styleSheetCSSOMWrapperSet, mathMLStyleSheet);2748 collect CSSOMWrappers(m_styleRuleToCSSOMWrapperMap,m_styleSheetCSSOMWrapperSet, mediaControlsStyleSheet);2749 collect CSSOMWrappers(m_styleRuleToCSSOMWrapperMap,m_styleSheetCSSOMWrapperSet, fullscreenStyleSheet);2750 2751 collect CSSOMWrappers(m_styleRuleToCSSOMWrapperMap, document()->styleSheetCollection());2746 collectFromStyleSheetContents(m_styleSheetCSSOMWrapperSet, simpleDefaultStyleSheet); 2747 collectFromStyleSheetContents(m_styleSheetCSSOMWrapperSet, defaultStyleSheet); 2748 collectFromStyleSheetContents(m_styleSheetCSSOMWrapperSet, quirksStyleSheet); 2749 collectFromStyleSheetContents(m_styleSheetCSSOMWrapperSet, svgStyleSheet); 2750 collectFromStyleSheetContents(m_styleSheetCSSOMWrapperSet, mathMLStyleSheet); 2751 collectFromStyleSheetContents(m_styleSheetCSSOMWrapperSet, mediaControlsStyleSheet); 2752 collectFromStyleSheetContents(m_styleSheetCSSOMWrapperSet, fullscreenStyleSheet); 2753 2754 collectFromDocumentStyleSheetCollection(styleSheetCollection); 2752 2755 } 2753 2756 return m_styleRuleToCSSOMWrapperMap.get(rule).get(); 2757 } 2758 2759 void InspectorCSSOMWrappers::reportMemoryUsage(MemoryObjectInfo* memoryObjectInfo) const 2760 { 2761 MemoryClassInfo info(memoryObjectInfo, this, WebCoreMemoryTypes::CSS); 2762 info.addMember(m_styleRuleToCSSOMWrapperMap); 2763 info.addMember(m_styleSheetCSSOMWrapperSet); 2754 2764 } 2755 2765 … … 5463 5473 info.addMember(m_viewportDependentMediaQueryResults); 5464 5474 info.ignoreMember(m_styleBuilder); 5465 info.addMember(m_styleRuleToCSSOMWrapperMap); 5466 info.addMember(m_styleSheetCSSOMWrapperSet); 5475 info.addMember(m_inspectorCSSOMWrappers); 5467 5476 #if ENABLE(CSS_FILTERS) && ENABLE(SVG) 5468 5477 info.addMember(m_pendingSVGDocuments); -
trunk/Source/WebCore/css/StyleResolver.h
r140643 r141373 133 133 }; 134 134 135 class InspectorCSSOMWrappers { 136 public: 137 // WARNING. This will construct CSSOM wrappers for all style rules and cache them in a map for significant memory cost. 138 // It is here to support inspector. Don't use for any regular engine functions. 139 CSSStyleRule* getWrapperForRuleInSheets(StyleRule*, DocumentStyleSheetCollection*); 140 void collectFromStyleSheetIfNeeded(CSSStyleSheet*); 141 142 void reportMemoryUsage(MemoryObjectInfo*) const; 143 144 private: 145 template <class ListType> 146 void collect(ListType*); 147 148 void collectFromStyleSheetContents(HashSet<RefPtr<CSSStyleSheet> >& sheetWrapperSet, StyleSheetContents*); 149 void collectFromStyleSheets(const Vector<RefPtr<CSSStyleSheet> >&); 150 void collectFromDocumentStyleSheetCollection(DocumentStyleSheetCollection*); 151 152 HashMap<StyleRule*, RefPtr<CSSStyleRule> > m_styleRuleToCSSOMWrapperMap; 153 HashSet<RefPtr<CSSStyleSheet> > m_styleSheetCSSOMWrapperSet; 154 }; 155 135 156 // This class selects a RenderStyle for a given element based on a collection of stylesheets. 136 157 class StyleResolver { … … 276 297 277 298 void invalidateMatchedPropertiesCache(); 278 279 // WARNING. This will construct CSSOM wrappers for all style rules and cache then in a map for significant memory cost.280 // It is here to support inspector. Don't use for any regular engine functions.281 CSSStyleRule* ensureFullCSSOMWrapperForInspector(StyleRule*);282 299 283 300 #if ENABLE(CSS_FILTERS) … … 445 462 446 463 CSSToStyleMap* styleMap() { return &m_styleMap; } 464 InspectorCSSOMWrappers& inspectorCSSOMWrappers() { return m_inspectorCSSOMWrappers; } 447 465 448 466 void reportMemoryUsage(MemoryObjectInfo*) const; … … 536 554 bool m_applyPropertyToVisitedLinkStyle; 537 555 const StyleBuilder& m_styleBuilder; 538 539 HashMap<StyleRule*, RefPtr<CSSStyleRule> > m_styleRuleToCSSOMWrapperMap;540 HashSet<RefPtr<CSSStyleSheet> > m_styleSheetCSSOMWrapperSet;541 556 542 557 #if ENABLE(CSS_SHADERS) … … 550 565 OwnPtr<StyleScopeResolver> m_scopeResolver; 551 566 CSSToStyleMap m_styleMap; 567 InspectorCSSOMWrappers m_inspectorCSSOMWrappers; 552 568 553 569 friend class StyleBuilder; -
trunk/Source/WebCore/inspector/InspectorCSSAgent.cpp
r140530 r141373 960 960 { 961 961 if (m_currentSelectorProfile) 962 m_currentSelectorProfile->startSelector(styleResolver-> ensureFullCSSOMWrapperForInspector(rule));962 m_currentSelectorProfile->startSelector(styleResolver->inspectorCSSOMWrappers().getWrapperForRuleInSheets(rule, styleResolver->document()->styleSheetCollection())); 963 963 } 964 964 … … 972 972 { 973 973 if (m_currentSelectorProfile) 974 m_currentSelectorProfile->startSelector(styleResolver-> ensureFullCSSOMWrapperForInspector(rule));974 m_currentSelectorProfile->startSelector(styleResolver->inspectorCSSOMWrappers().getWrapperForRuleInSheets(rule, styleResolver->document()->styleSheetCollection())); 975 975 } 976 976 … … 1126 1126 // FIXME: This could be factored better. StyleResolver::styleRulesForElement should return a StyleRule vector, not a CSSRuleList. 1127 1127 if (!rule->parentStyleSheet()) { 1128 rule = styleResolver-> ensureFullCSSOMWrapperForInspector(rule->styleRule());1128 rule = styleResolver->inspectorCSSOMWrappers().getWrapperForRuleInSheets(rule->styleRule(), styleResolver->document()->styleSheetCollection()); 1129 1129 if (!rule) 1130 1130 return 0;
Note: See TracChangeset
for help on using the changeset viewer.