Two small refinements to matched properties cache.
authorakling@apple.com <akling@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 19 Dec 2013 13:59:11 +0000 (13:59 +0000)
committerakling@apple.com <akling@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 19 Dec 2013 13:59:11 +0000 (13:59 +0000)
<https://webkit.org/b/125992>

- Avoid computing the matched properties hash if we're banned from
  using the cache anyway.

- When adding a new entry to the cache, use move semantics to avoid
  creating a transient copy of all the data.

Reviewed by Antti Koivisto.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@160829 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/WebCore/ChangeLog
Source/WebCore/css/StyleResolver.cpp

index 37ce84bd062cb77935854de3a49330685ae600fd..2494cf7549ec99245676e88a9ebec5be8408dd19 100644 (file)
@@ -1,3 +1,16 @@
+2013-12-19  Andreas Kling  <akling@apple.com>
+
+        Two small refinements to matched properties cache.
+        <https://webkit.org/b/125992>
+
+        - Avoid computing the matched properties hash if we're banned from
+          using the cache anyway.
+
+        - When adding a new entry to the cache, use move semantics to avoid
+          creating a transient copy of all the data.
+
+        Reviewed by Antti Koivisto.
+
 2013-12-19  Andreas Kling  <akling@apple.com>
 
         CascadedProperties should use a bitset to track property presence.
index 8cf9f99ea07a9e15813db395d734136e978cfe02..806d446b1b96986890e93cf95f06a139c8c4fb41 100644 (file)
@@ -1735,7 +1735,7 @@ void StyleResolver::addToMatchedPropertiesCache(const RenderStyle* style, const
     // The RenderStyle in the cache is really just a holder for the substructures and never used as-is.
     cacheItem.renderStyle = RenderStyle::clone(style);
     cacheItem.parentRenderStyle = RenderStyle::clone(parentStyle);
-    m_matchedPropertiesCache.add(hash, cacheItem);
+    m_matchedPropertiesCache.add(hash, std::move(cacheItem));
 }
 
 void StyleResolver::invalidateMatchedPropertiesCache()
@@ -1799,10 +1799,10 @@ void StyleResolver::applyMatchedProperties(const MatchResult& matchResult, const
 {
     ASSERT(element);
     State& state = m_state;
-    unsigned cacheHash = matchResult.isCacheable ? computeMatchedPropertiesHash(matchResult.matchedProperties.data(), matchResult.matchedProperties.size()) : 0;
+    unsigned cacheHash = shouldUseMatchedPropertiesCache && matchResult.isCacheable ? computeMatchedPropertiesHash(matchResult.matchedProperties.data(), matchResult.matchedProperties.size()) : 0;
     bool applyInheritedOnly = false;
     const MatchedPropertiesCacheItem* cacheItem = 0;
-    if (shouldUseMatchedPropertiesCache && cacheHash && (cacheItem = findFromMatchedPropertiesCache(cacheHash, matchResult))) {
+    if (cacheHash && (cacheItem = findFromMatchedPropertiesCache(cacheHash, matchResult))) {
         // We can build up the style by copying non-inherited properties from an earlier style object built using the same exact
         // style declarations. We then only need to apply the inherited properties, if any, as their values can depend on the 
         // element context. This is fast and saves memory by reusing the style data structures.