⚠ Archived content — this site is no longer maintained.   Current WebKit documentation is at docs.webkit.org.

Changeset 280638 in webkit


Ignore:
Timestamp:
Aug 4, 2021, 10:39:50 AM (5 years ago)
Author:
Antti Koivisto
Message:

Reduce Vector<> wasted capacity in some RuleSet code
https://bugs.webkit.org/show_bug.cgi?id=224160
<rdar://problem/76369555>

Unreviewed, reverting revert r279242.

Reland as this was not related to the crashes seen.

  • style/RuleSet.cpp:

(WebCore::Style::RuleSet::addRulesFromSheet):
(WebCore::Style::RuleSet::evaluateDynamicMediaQueryRules):
(WebCore::Style::shrinkDynamicRules):
(WebCore::Style::RuleSet::shrinkToFit):

  • style/RuleSet.h:
Location:
trunk/Source/WebCore
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r280633 r280638  
     12021-08-04  Antti Koivisto  <antti@apple.com>
     2
     3        Reduce Vector<> wasted capacity in some RuleSet code
     4        https://bugs.webkit.org/show_bug.cgi?id=224160
     5        <rdar://problem/76369555>
     6
     7        Unreviewed, reverting revert r279242.
     8
     9        Reland as this was not related to the crashes seen.
     10
     11        * style/RuleSet.cpp:
     12        (WebCore::Style::RuleSet::addRulesFromSheet):
     13        (WebCore::Style::RuleSet::evaluateDynamicMediaQueryRules):
     14        (WebCore::Style::shrinkDynamicRules):
     15        (WebCore::Style::RuleSet::shrinkToFit):
     16        * style/RuleSet.h:
     17
    1182021-08-04  Andres Gonzalez  <andresg_22@apple.com>
    219
  • trunk/Source/WebCore/style/RuleSet.cpp

    r279242 r280638  
    314314    auto mediaQueryCollector = MediaQueryCollector { evaluator };
    315315    addRulesFromSheet(sheet, mediaQueryCollector, nullptr, AddRulesMode::Normal);
     316
     317    if (m_autoShrinkToFitEnabled)
     318        shrinkToFit();
    316319}
    317320
     
    334337    m_hasViewportDependentMediaQueries = mediaQueryCollector.hasViewportDependentMediaQueries;
    335338
    336     if (mediaQueryCollector.dynamicMediaQueryRules.isEmpty())
    337         return;
    338 
    339     auto firstNewIndex = m_dynamicMediaQueryRules.size();
    340     m_dynamicMediaQueryRules.appendVector(WTFMove(mediaQueryCollector.dynamicMediaQueryRules));
    341 
    342     // Set the initial values.
    343     evaluateDynamicMediaQueryRules(evaluator, firstNewIndex);
     339    if (!mediaQueryCollector.dynamicMediaQueryRules.isEmpty()) {
     340        auto firstNewIndex = m_dynamicMediaQueryRules.size();
     341        m_dynamicMediaQueryRules.appendVector(WTFMove(mediaQueryCollector.dynamicMediaQueryRules));
     342
     343        // Set the initial values.
     344        evaluateDynamicMediaQueryRules(evaluator, firstNewIndex);
     345    }
     346
     347    if (m_autoShrinkToFitEnabled)
     348        shrinkToFit();
    344349}
    345350
     
    356361
    357362    addChildRules(sheet.childRules(), mediaQueryCollector, resolver, mode);
    358 
    359     if (m_autoShrinkToFitEnabled && mode == AddRulesMode::Normal)
    360         shrinkToFit();
    361363}
    362364
     
    416418                ruleSet->addRule(*feature.styleRule, feature.selectorIndex, feature.selectorListIndex);
    417419        }
     420        ruleSet->shrinkToFit();
    418421        return ruleSet;
    419422    }).iterator->value;
     
    473476}
    474477
     478static inline void shrinkDynamicRules(Vector<RuleSet::DynamicMediaQueryRules>& dynamicRules)
     479{
     480    for (auto& rule : dynamicRules)
     481        rule.shrinkToFit();
     482
     483    dynamicRules.shrinkToFit();
     484}
     485
    475486void RuleSet::shrinkToFit()
    476487{
     
    480491    shrinkMapVectorsToFit(m_tagLowercaseLocalNameRules);
    481492    shrinkMapVectorsToFit(m_shadowPseudoElementRules);
     493
    482494    m_linkPseudoClassRules.shrinkToFit();
    483495#if ENABLE(VIDEO)
     
    486498    m_hostPseudoClassRules.shrinkToFit();
    487499    m_slottedPseudoElementRules.shrinkToFit();
     500    m_partPseudoElementRules.shrinkToFit();
    488501    m_focusPseudoClassRules.shrinkToFit();
    489502    m_universalRules.shrinkToFit();
     503
    490504    m_pageRules.shrinkToFit();
    491505    m_features.shrinkToFit();
     506
     507    shrinkDynamicRules(m_dynamicMediaQueryRules);
    492508}
    493509
  • trunk/Source/WebCore/style/RuleSet.h

    r279365 r280638  
    7777        bool requiresFullReset { false };
    7878        bool result { true };
     79
     80        void shrinkToFit()
     81        {
     82            mediaQuerySets.shrinkToFit();
     83            affectedRulePositions.shrinkToFit();
     84            ruleFeatures.shrinkToFit();
     85        }
    7986    };
    8087
     
    154161    template<typename Function> void traverseRuleDatas(Function&&);
    155162
    156 
    157163    AtomRuleMap m_idRules;
    158164    AtomRuleMap m_classRules;
     
    170176    RuleDataVector m_universalRules;
    171177    Vector<StyleRulePage*> m_pageRules;
     178    RuleFeatureSet m_features;
     179    Vector<DynamicMediaQueryRules> m_dynamicMediaQueryRules;
     180    HashMap<Vector<size_t>, Ref<const RuleSet>> m_mediaQueryInvalidationRuleSetCache;
    172181    unsigned m_ruleCount { 0 };
    173182    bool m_hasHostPseudoClassRulesMatchingInShadowTree { false };
    174183    bool m_autoShrinkToFitEnabled { true };
    175     RuleFeatureSet m_features;
    176184    bool m_hasViewportDependentMediaQueries { false };
    177     Vector<DynamicMediaQueryRules> m_dynamicMediaQueryRules;
    178     HashMap<Vector<size_t>, Ref<const RuleSet>> m_mediaQueryInvalidationRuleSetCache;
    179185};
    180186
Note: See TracChangeset for help on using the changeset viewer.