Changeset 141373 in webkit


Ignore:
Timestamp:
Jan 30, 2013 9:03:58 PM (11 years ago)
Author:
hayato@chromium.org
Message:

Split CSSOMWrapper data and functions out from StyleResolver into its own class.
https://bugs.webkit.org/show_bug.cgi?id=107779

Reviewed by Dimitri Glazkov.

Factored CSSOMWrapper logic and data out from StyleResolver into a
InspectorCSSOMWrappers class. Since InspectorCSSOMWrappers
depends on static variables defined in StyleResolver.cpp, this
patch does not extract a new class into a new file, which makes a
review easier since it produces readable diffs.

After we factor static variables related to default style sheets
in a following patch (bug 107780), I'll move
InspectorCSSOMWrappers into a its own file.

No new tests, refactoring only.

  • css/StyleResolver.cpp:

(WebCore):
(WebCore::StyleResolver::appendAuthorStyleSheets):
(WebCore::InspectorCSSOMWrappers::collectFromStyleSheetIfNeeded):
(WebCore::InspectorCSSOMWrappers::collect):
(WebCore::InspectorCSSOMWrappers::collectFromStyleSheetContents): Name it explicitly rather than overloading.
(WebCore::InspectorCSSOMWrappers::collectFromStyleSheets): Name it explicitly rather than overloading.
(WebCore::InspectorCSSOMWrappers::collectFromDocumentStyleSheetCollection): Name it explicitly rather than overloading.
(WebCore::InspectorCSSOMWrappers::getWrapperForRuleInSheets): Renamed from ensureFullCSSOMWrapperForInspector().
(WebCore::InspectorCSSOMWrappers::reportMemoryUsage):
(WebCore::StyleResolver::reportMemoryUsage):

  • css/StyleResolver.h:

(InspectorCSSOMWrappers):
(WebCore):
(StyleResolver):
(WebCore::StyleResolver::inspectorCSSOMWrappers):

  • inspector/InspectorCSSAgent.cpp:

(WebCore::InspectorCSSAgent::willMatchRule):
(WebCore::InspectorCSSAgent::willProcessRule):
(WebCore::InspectorCSSAgent::buildObjectForRule):

Location:
trunk/Source/WebCore
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r141371 r141373  
     12013-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
    1412013-01-30  Sheriff Bot  <webkit.review.bot@gmail.com>
    242
  • trunk/Source/WebCore/css/StyleResolver.cpp

    r141280 r141373  
    229229static void loadFullDefaultStyle();
    230230static void loadSimpleDefaultStyle();
    231 template <class ListType>
    232 static void collectCSSOMWrappers(HashMap<StyleRule*, RefPtr<CSSStyleRule> >&, ListType*);
    233231
    234232// FIXME: It would be nice to use some mechanism that guarantees this is in sync with the real UA stylesheet.
     
    395393
    396394        m_authorStyle->addRulesFromSheet(sheet, *m_medium, this);
    397         if (!m_styleRuleToCSSOMWrapperMap.isEmpty())
    398             collectCSSOMWrappers(m_styleRuleToCSSOMWrapperMap, cssSheet);
     395        m_inspectorCSSOMWrappers.collectFromStyleSheetIfNeeded(cssSheet);
    399396    }
    400397    m_authorStyle->shrinkToFit();
     
    26762673}
    26772674
     2675void InspectorCSSOMWrappers::collectFromStyleSheetIfNeeded(CSSStyleSheet* styleSheet)
     2676{
     2677    if (!m_styleRuleToCSSOMWrapperMap.isEmpty())
     2678        collect(styleSheet);
     2679}
     2680
    26782681template <class ListType>
    2679 static void collectCSSOMWrappers(HashMap<StyleRule*, RefPtr<CSSStyleRule> >& wrapperMap, ListType* listType)
     2682void InspectorCSSOMWrappers::collect(ListType* listType)
    26802683{
    26812684    if (!listType)
     
    26862689        switch (cssRule->type()) {
    26872690        case CSSRule::IMPORT_RULE:
    2688             collectCSSOMWrappers(wrapperMap, static_cast<CSSImportRule*>(cssRule)->styleSheet());
     2691            collect(static_cast<CSSImportRule*>(cssRule)->styleSheet());
    26892692            break;
    26902693        case CSSRule::MEDIA_RULE:
    2691             collectCSSOMWrappers(wrapperMap, static_cast<CSSMediaRule*>(cssRule));
     2694            collect(static_cast<CSSMediaRule*>(cssRule));
    26922695            break;
    26932696#if ENABLE(CSS3_CONDITIONAL_RULES)
    26942697        case CSSRule::SUPPORTS_RULE:
    2695             collectCSSOMWrappers(wrapperMap, static_cast<CSSSupportsRule*>(cssRule));
     2698            collectCSSOMWrappers(static_cast<CSSSupportsRule*>(cssRule));
    26962699            break;
    26972700#endif
    26982701#if ENABLE(CSS_REGIONS)
    26992702        case CSSRule::WEBKIT_REGION_RULE:
    2700             collectCSSOMWrappers(wrapperMap, static_cast<WebKitCSSRegionRule*>(cssRule));
     2703            collect(static_cast<WebKitCSSRegionRule*>(cssRule));
    27012704            break;
    27022705#endif
    27032706#if ENABLE(SHADOW_DOM)
    27042707        case CSSRule::HOST_RULE:
    2705             collectCSSOMWrappers(wrapperMap, static_cast<CSSHostRule*>(cssRule));
     2708            collect(static_cast<CSSHostRule*>(cssRule));
    27062709            break;
    27072710#endif
    27082711        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));
    27102713            break;
    27112714        default:
     
    27152718}
    27162719
    2717 static void collectCSSOMWrappers(HashMap<StyleRule*, RefPtr<CSSStyleRule> >& wrapperMap, HashSet<RefPtr<CSSStyleSheet> >& sheetWrapperSet, StyleSheetContents* styleSheet)
     2720void InspectorCSSOMWrappers::collectFromStyleSheetContents(HashSet<RefPtr<CSSStyleSheet> >& sheetWrapperSet, StyleSheetContents* styleSheet)
    27182721{
    27192722    if (!styleSheet)
     
    27212724    RefPtr<CSSStyleSheet> styleSheetWrapper = CSSStyleSheet::create(styleSheet);
    27222725    sheetWrapperSet.add(styleSheetWrapper);
    2723     collectCSSOMWrappers(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
     2729void InspectorCSSOMWrappers::collectFromStyleSheets(const Vector<RefPtr<CSSStyleSheet> >& sheets)
    27272730{
    27282731    for (unsigned i = 0; i < sheets.size(); ++i)
    2729         collectCSSOMWrappers(wrapperMap, sheets[i].get());
    2730 }
    2731 
    2732 static void collectCSSOMWrappers(HashMap<StyleRule*, RefPtr<CSSStyleRule> >& wrapperMap, DocumentStyleSheetCollection* styleSheetCollection)
    2733 {
    2734     collectCSSOMWrappers(wrapperMap, styleSheetCollection->activeAuthorStyleSheets());
    2735     collectCSSOMWrappers(wrapperMap, styleSheetCollection->pageUserSheet());
    2736     collectCSSOMWrappers(wrapperMap, styleSheetCollection->injectedUserStyleSheets());
    2737     collectCSSOMWrappers(wrapperMap, styleSheetCollection->documentUserStyleSheets());
    2738 }
    2739 
    2740 CSSStyleRule* StyleResolver::ensureFullCSSOMWrapperForInspector(StyleRule* rule)
     2732        collect(sheets[i].get());
     2733}
     2734
     2735void InspectorCSSOMWrappers::collectFromDocumentStyleSheetCollection(DocumentStyleSheetCollection* styleSheetCollection)
     2736{
     2737    collectFromStyleSheets(styleSheetCollection->activeAuthorStyleSheets());
     2738    collect(styleSheetCollection->pageUserSheet());
     2739    collectFromStyleSheets(styleSheetCollection->injectedUserStyleSheets());
     2740    collectFromStyleSheets(styleSheetCollection->documentUserStyleSheets());
     2741}
     2742
     2743CSSStyleRule* InspectorCSSOMWrappers::getWrapperForRuleInSheets(StyleRule* rule, DocumentStyleSheetCollection* styleSheetCollection)
    27412744{
    27422745    if (m_styleRuleToCSSOMWrapperMap.isEmpty()) {
    2743         collectCSSOMWrappers(m_styleRuleToCSSOMWrapperMap, m_styleSheetCSSOMWrapperSet, simpleDefaultStyleSheet);
    2744         collectCSSOMWrappers(m_styleRuleToCSSOMWrapperMap, m_styleSheetCSSOMWrapperSet, defaultStyleSheet);
    2745         collectCSSOMWrappers(m_styleRuleToCSSOMWrapperMap, m_styleSheetCSSOMWrapperSet, quirksStyleSheet);
    2746         collectCSSOMWrappers(m_styleRuleToCSSOMWrapperMap, m_styleSheetCSSOMWrapperSet, svgStyleSheet);
    2747         collectCSSOMWrappers(m_styleRuleToCSSOMWrapperMap, m_styleSheetCSSOMWrapperSet, mathMLStyleSheet);
    2748         collectCSSOMWrappers(m_styleRuleToCSSOMWrapperMap, m_styleSheetCSSOMWrapperSet, mediaControlsStyleSheet);
    2749         collectCSSOMWrappers(m_styleRuleToCSSOMWrapperMap, m_styleSheetCSSOMWrapperSet, fullscreenStyleSheet);
    2750 
    2751         collectCSSOMWrappers(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);
    27522755    }
    27532756    return m_styleRuleToCSSOMWrapperMap.get(rule).get();
     2757}
     2758
     2759void InspectorCSSOMWrappers::reportMemoryUsage(MemoryObjectInfo* memoryObjectInfo) const
     2760{
     2761    MemoryClassInfo info(memoryObjectInfo, this, WebCoreMemoryTypes::CSS);
     2762    info.addMember(m_styleRuleToCSSOMWrapperMap);
     2763    info.addMember(m_styleSheetCSSOMWrapperSet);
    27542764}
    27552765
     
    54635473    info.addMember(m_viewportDependentMediaQueryResults);
    54645474    info.ignoreMember(m_styleBuilder);
    5465     info.addMember(m_styleRuleToCSSOMWrapperMap);
    5466     info.addMember(m_styleSheetCSSOMWrapperSet);
     5475    info.addMember(m_inspectorCSSOMWrappers);
    54675476#if ENABLE(CSS_FILTERS) && ENABLE(SVG)
    54685477    info.addMember(m_pendingSVGDocuments);
  • trunk/Source/WebCore/css/StyleResolver.h

    r140643 r141373  
    133133};
    134134
     135class InspectorCSSOMWrappers {
     136public:
     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
     144private:
     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
    135156// This class selects a RenderStyle for a given element based on a collection of stylesheets.
    136157class StyleResolver {
     
    276297   
    277298    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*);
    282299
    283300#if ENABLE(CSS_FILTERS)
     
    445462
    446463    CSSToStyleMap* styleMap() { return &m_styleMap; }
     464    InspectorCSSOMWrappers& inspectorCSSOMWrappers() { return m_inspectorCSSOMWrappers; }
    447465
    448466    void reportMemoryUsage(MemoryObjectInfo*) const;
     
    536554    bool m_applyPropertyToVisitedLinkStyle;
    537555    const StyleBuilder& m_styleBuilder;
    538    
    539     HashMap<StyleRule*, RefPtr<CSSStyleRule> > m_styleRuleToCSSOMWrapperMap;
    540     HashSet<RefPtr<CSSStyleSheet> > m_styleSheetCSSOMWrapperSet;
    541556
    542557#if ENABLE(CSS_SHADERS)
     
    550565    OwnPtr<StyleScopeResolver> m_scopeResolver;
    551566    CSSToStyleMap m_styleMap;
     567    InspectorCSSOMWrappers m_inspectorCSSOMWrappers;
    552568
    553569    friend class StyleBuilder;
  • trunk/Source/WebCore/inspector/InspectorCSSAgent.cpp

    r140530 r141373  
    960960{
    961961    if (m_currentSelectorProfile)
    962         m_currentSelectorProfile->startSelector(styleResolver->ensureFullCSSOMWrapperForInspector(rule));
     962        m_currentSelectorProfile->startSelector(styleResolver->inspectorCSSOMWrappers().getWrapperForRuleInSheets(rule, styleResolver->document()->styleSheetCollection()));
    963963}
    964964
     
    972972{
    973973    if (m_currentSelectorProfile)
    974         m_currentSelectorProfile->startSelector(styleResolver->ensureFullCSSOMWrapperForInspector(rule));
     974        m_currentSelectorProfile->startSelector(styleResolver->inspectorCSSOMWrappers().getWrapperForRuleInSheets(rule, styleResolver->document()->styleSheetCollection()));
    975975}
    976976
     
    11261126    // FIXME: This could be factored better. StyleResolver::styleRulesForElement should return a StyleRule vector, not a CSSRuleList.
    11271127    if (!rule->parentStyleSheet()) {
    1128         rule = styleResolver->ensureFullCSSOMWrapperForInspector(rule->styleRule());
     1128        rule = styleResolver->inspectorCSSOMWrappers().getWrapperForRuleInSheets(rule->styleRule(), styleResolver->document()->styleSheetCollection());
    11291129        if (!rule)
    11301130            return 0;
Note: See TracChangeset for help on using the changeset viewer.