CSSValuePool: Made identifier value cache a fixed-size array.
authorkling@webkit.org <kling@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 18 Apr 2012 02:49:54 +0000 (02:49 +0000)
committerkling@webkit.org <kling@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 18 Apr 2012 02:49:54 +0000 (02:49 +0000)
<http://webkit.org/b/84219>

Reviewed by Antti Koivisto.

Change the identifier CSSPrimitiveValue cache in CSSValuePool from a HashMap to a
fixed-size array of RefPtr<CSSPrimitiveValue>s.

We have ~700 values total, so this is quite space efficient now that the CSSValuePool
is globally shared. More importantly it avoids a hash lookup every time we need an
identifier value.

* css/CSSValuePool.h:
* css/CSSValuePool.cpp:
(WebCore::CSSValuePool::createIdentifierValue):

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

Source/WebCore/ChangeLog
Source/WebCore/css/CSSValuePool.cpp
Source/WebCore/css/CSSValuePool.h

index 32fdff0..026c2ee 100644 (file)
@@ -1,3 +1,21 @@
+2012-04-17  Andreas Kling  <kling@webkit.org>
+
+        CSSValuePool: Made identifier value cache a fixed-size array.
+        <http://webkit.org/b/84219>
+
+        Reviewed by Antti Koivisto.
+
+        Change the identifier CSSPrimitiveValue cache in CSSValuePool from a HashMap to a
+        fixed-size array of RefPtr<CSSPrimitiveValue>s.
+
+        We have ~700 values total, so this is quite space efficient now that the CSSValuePool
+        is globally shared. More importantly it avoids a hash lookup every time we need an
+        identifier value.
+
+        * css/CSSValuePool.h:
+        * css/CSSValuePool.cpp:
+        (WebCore::CSSValuePool::createIdentifierValue):
+
 2012-04-17  Antoine Labour  <piman@chromium.org>
 
         [Chromium] Clean up texture ids on the impl side when losing the context
index ea41d37..78391f8 100644 (file)
@@ -57,11 +57,9 @@ PassRefPtr<CSSPrimitiveValue> CSSValuePool::createIdentifierValue(int ident)
     if (ident <= 0 || ident >= numCSSValueKeywords)
         return CSSPrimitiveValue::createIdentifier(ident);
 
-    RefPtr<CSSPrimitiveValue> dummyValue;
-    IdentifierValueCache::AddResult entry = m_identifierValueCache.add(ident, dummyValue);
-    if (entry.isNewEntry)
-        entry.iterator->second = CSSPrimitiveValue::createIdentifier(ident);
-    return entry.iterator->second;
+    if (!m_identifierValueCache[ident])
+        m_identifierValueCache[ident] = CSSPrimitiveValue::createIdentifier(ident);
+    return m_identifierValueCache[ident];
 }
 
 PassRefPtr<CSSPrimitiveValue> CSSValuePool::createColorValue(unsigned rgbValue)
index 9c1b386..4a032c1 100644 (file)
@@ -29,6 +29,7 @@
 #include "CSSInheritedValue.h"
 #include "CSSInitialValue.h"
 #include "CSSPrimitiveValue.h"
+#include "CSSValueKeywords.h"
 #include <wtf/text/AtomicStringHash.h>
 #include <wtf/HashMap.h>
 #include <wtf/RefPtr.h>
@@ -57,8 +58,7 @@ private:
     RefPtr<CSSInitialValue> m_implicitInitialValue;
     RefPtr<CSSInitialValue> m_explicitInitialValue;
 
-    typedef HashMap<int, RefPtr<CSSPrimitiveValue> > IdentifierValueCache;
-    IdentifierValueCache m_identifierValueCache;
+    RefPtr<CSSPrimitiveValue> m_identifierValueCache[numCSSValueKeywords];
 
     typedef HashMap<unsigned, RefPtr<CSSPrimitiveValue> > ColorValueCache;
     ColorValueCache m_colorValueCache;