Some improvements to RuleSet shrinking.
<https://webkit.org/b/140534>
Reviewed by Antti Koivisto.
Give an inline capacity (1) to the RuleData Vectors in RuleSet.
The vast majority of Vectors have only a single entry, and this
avoids having to allocate a separate Vector backing store for them.
Also make sure to shrink some Vectors that we weren't already,
like those in RuleFeatureSet.
* css/ElementRuleCollector.cpp:
(WebCore::ElementRuleCollector::collectMatchingRulesForList):
* css/ElementRuleCollector.h:
* css/RuleFeature.cpp:
(WebCore::RuleFeatureSet::shrinkToFit):
* css/RuleFeature.h:
* css/RuleSet.cpp:
(WebCore::RuleSet::addToRuleSet):
(WebCore::rulesCountForName):
(WebCore::shrinkMapVectorsToFit):
(WebCore::RuleSet::shrinkToFit):
* css/RuleSet.h:
(WebCore::RuleSet::idRules):
(WebCore::RuleSet::classRules):
(WebCore::RuleSet::tagRules):
(WebCore::RuleSet::shadowPseudoElementRules):
(WebCore::RuleSet::linkPseudoClassRules):
(WebCore::RuleSet::cuePseudoRules):
(WebCore::RuleSet::focusPseudoClassRules):
(WebCore::RuleSet::universalRules):
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@178580 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/Source/WebCore/css/RuleSet.cpp b/Source/WebCore/css/RuleSet.cpp
index 59a1a26..be73c21 100644
--- a/Source/WebCore/css/RuleSet.cpp
+++ b/Source/WebCore/css/RuleSet.cpp
@@ -183,15 +183,15 @@
{
if (!key)
return;
- std::unique_ptr<Vector<RuleData>>& rules = map.add(key, nullptr).iterator->value;
+ auto& rules = map.add(key, nullptr).iterator->value;
if (!rules)
- rules = std::make_unique<Vector<RuleData>>();
+ rules = std::make_unique<RuleDataVector>();
rules->append(ruleData);
}
static unsigned rulesCountForName(const RuleSet::AtomRuleMap& map, AtomicStringImpl* name)
{
- if (const Vector<RuleData>* rules = map.get(name))
+ if (const auto* rules = map.get(name))
return rules->size();
return 0;
}
@@ -377,9 +377,8 @@
static inline void shrinkMapVectorsToFit(RuleSet::AtomRuleMap& map)
{
- RuleSet::AtomRuleMap::iterator end = map.end();
- for (RuleSet::AtomRuleMap::iterator it = map.begin(); it != end; ++it)
- it->value->shrinkToFit();
+ for (auto& vector : map.values())
+ vector->shrinkToFit();
}
void RuleSet::shrinkToFit()
@@ -395,6 +394,8 @@
m_focusPseudoClassRules.shrinkToFit();
m_universalRules.shrinkToFit();
m_pageRules.shrinkToFit();
+ m_features.shrinkToFit();
+ m_regionSelectorsAndRuleSets.shrinkToFit();
}
} // namespace WebCore