CodeBlock::m_argumentValueProfiles wastes a lot of memory.
authorakling@apple.com <akling@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 18 Jul 2013 16:50:38 +0000 (16:50 +0000)
committerakling@apple.com <akling@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 18 Jul 2013 16:50:38 +0000 (16:50 +0000)
<http://webkit.org/b/118852>
<rdar://problem/14481659>

Reviewed by Anders Carlsson.

Source/JavaScriptCore:

Use Vector::resizeToFit() for CodeBlock::m_argumentValueProfiles. We don't need any padding
for growth, since we won't be appending to it anyway.

921 KB progression on <http://twitter.com/awesomekling>

* bytecode/CodeBlock.cpp:
(JSC::CodeBlock::setNumParameters):

Source/WTF:

Add Vector::resizeToFit(size), like resize() but without growth padding.

* wtf/Vector.h:
(WTF::::resizeToFit):

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

Source/JavaScriptCore/ChangeLog
Source/JavaScriptCore/bytecode/CodeBlock.cpp
Source/WTF/ChangeLog
Source/WTF/wtf/Vector.h

index 4dbf82c..a2fc600 100644 (file)
@@ -1,3 +1,19 @@
+2013-07-18  Andreas Kling  <akling@apple.com>
+
+        CodeBlock::m_argumentValueProfiles wastes a lot of memory.
+        <http://webkit.org/b/118852>
+        <rdar://problem/14481659>
+
+        Reviewed by Anders Carlsson.
+
+        Use Vector::resizeToFit() for CodeBlock::m_argumentValueProfiles. We don't need any padding
+        for growth, since we won't be appending to it anyway.
+
+        921 KB progression on <http://twitter.com/awesomekling>
+
+        * bytecode/CodeBlock.cpp:
+        (JSC::CodeBlock::setNumParameters):
+
 2013-07-17  Filip Pizlo  <fpizlo@apple.com>
 
         Unreviewed, fix 32-bit after http://trac.webkit.org/changeset/152813
index 15f83b3..bd76ef3 100644 (file)
@@ -2018,7 +2018,7 @@ void CodeBlock::setNumParameters(int newValue)
     m_numParameters = newValue;
 
 #if ENABLE(VALUE_PROFILER)
-    m_argumentValueProfiles.resize(newValue);
+    m_argumentValueProfiles.resizeToFit(newValue);
 #endif
 }
 
@@ -2501,8 +2501,6 @@ void CodeBlock::shrinkToFit(ShrinkMode shrinkMode)
     m_callLinkInfos.shrinkToFit();
 #endif
 #if ENABLE(VALUE_PROFILER)
-    if (shrinkMode == EarlyShrink)
-        m_argumentValueProfiles.shrinkToFit();
     m_rareCaseProfiles.shrinkToFit();
     m_specialFastCaseProfiles.shrinkToFit();
 #endif
index eda13e1..f392bcb 100644 (file)
@@ -1,3 +1,16 @@
+2013-07-18  Andreas Kling  <akling@apple.com>
+
+        CodeBlock::m_argumentValueProfiles wastes a lot of memory.
+        <http://webkit.org/b/118852>
+        <rdar://problem/14481659>
+
+        Reviewed by Anders Carlsson.
+
+        Add Vector::resizeToFit(size), like resize() but without growth padding.
+
+        * wtf/Vector.h:
+        (WTF::::resizeToFit):
+
 2013-07-17  Benjamin Poulain  <benjamin@webkit.org>
 
         Add a thread safety assertion when creating an AtomicString from a StringImpl
index d1b3621..66d46a6 100644 (file)
@@ -608,6 +608,7 @@ namespace WTF {
         void shrink(size_t size);
         void grow(size_t size);
         void resize(size_t size);
+        void resizeToFit(size_t size);
         void reserveCapacity(size_t newCapacity);
         bool tryReserveCapacity(size_t newCapacity);
         void reserveInitialCapacity(size_t initialCapacity);
@@ -897,6 +898,13 @@ namespace WTF {
     }
 
     template<typename T, size_t inlineCapacity, typename OverflowHandler>
+    void Vector<T, inlineCapacity, OverflowHandler>::resizeToFit(size_t size)
+    {
+        reserveCapacity(size);
+        resize(size);
+    }
+
+    template<typename T, size_t inlineCapacity, typename OverflowHandler>
     void Vector<T, inlineCapacity, OverflowHandler>::shrink(size_t size)
     {
         ASSERT(size <= m_size);