Inline the trivial parts of GC deferral.
authorakling@apple.com <akling@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sun, 9 Mar 2014 21:07:32 +0000 (21:07 +0000)
committerakling@apple.com <akling@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sun, 9 Mar 2014 21:07:32 +0000 (21:07 +0000)
<https://webkit.org/b/129984>

Made most of the functions called by the DeferGC RAII object inline
to avoid function call overhead.

Looks like ~1% progression on DYEB.

Reviewed by Geoffrey Garen.

* heap/Heap.cpp:
* heap/Heap.h:
(JSC::Heap::incrementDeferralDepth):
(JSC::Heap::decrementDeferralDepth):
(JSC::Heap::collectIfNecessaryOrDefer):
(JSC::Heap::decrementDeferralDepthAndGCIfNeeded):

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

Source/JavaScriptCore/ChangeLog
Source/JavaScriptCore/heap/Heap.cpp
Source/JavaScriptCore/heap/Heap.h

index cb03c7eb9f3d954c62ea60add06a2788fa94ea71..6e58a2b982f5161afdc7036ae9cd752de5760f74 100644 (file)
@@ -1,3 +1,22 @@
+2014-03-09  Andreas Kling  <akling@apple.com>
+
+        Inline the trivial parts of GC deferral.
+        <https://webkit.org/b/129984>
+
+        Made most of the functions called by the DeferGC RAII object inline
+        to avoid function call overhead.
+
+        Looks like ~1% progression on DYEB.
+
+        Reviewed by Geoffrey Garen.
+
+        * heap/Heap.cpp:
+        * heap/Heap.h:
+        (JSC::Heap::incrementDeferralDepth):
+        (JSC::Heap::decrementDeferralDepth):
+        (JSC::Heap::collectIfNecessaryOrDefer):
+        (JSC::Heap::decrementDeferralDepthAndGCIfNeeded):
+
 2014-03-08  Mark Lam  <mark.lam@apple.com>
 
         32-bit x86 handleUncaughtException returns to wrong location after a stack overflow.
index 6f998b87a1b1d2377af4ae260641e6beec476657..cce7f6a4c83ecad6b2f525c36d5ee4bfafed5bd1 100644 (file)
@@ -916,18 +916,6 @@ void Heap::collect()
     }
 }
 
-bool Heap::collectIfNecessaryOrDefer()
-{
-    if (isDeferred())
-        return false;
-
-    if (!shouldCollect())
-        return false;
-
-    collect();
-    return true;
-}
-
 void Heap::suspendCompilerThreads()
 {
 #if ENABLE(DFG_JIT)
@@ -1201,26 +1189,6 @@ void Heap::zombifyDeadObjects()
     m_objectSpace.forEachDeadCell<Zombify>(iterationScope);
 }
 
-void Heap::incrementDeferralDepth()
-{
-    RELEASE_ASSERT(m_deferralDepth < 100); // Sanity check to make sure this doesn't get ridiculous.
-    
-    m_deferralDepth++;
-}
-
-void Heap::decrementDeferralDepth()
-{
-    RELEASE_ASSERT(m_deferralDepth >= 1);
-    
-    m_deferralDepth--;
-}
-
-void Heap::decrementDeferralDepthAndGCIfNeeded()
-{
-    decrementDeferralDepth();
-    collectIfNecessaryOrDefer();
-}
-
 void Heap::writeBarrier(const JSCell* from)
 {
 #if ENABLE(GGC)
index cf23e2cb0e2f16b560ccad9601d1f4977dc26d58..4e25e8260306ce490d40a1347339dffc31a9dc67 100644 (file)
@@ -301,9 +301,9 @@ namespace JSC {
 
         JSStack& stack();
         
-        JS_EXPORT_PRIVATE void incrementDeferralDepth();
+        void incrementDeferralDepth();
         void decrementDeferralDepth();
-        JS_EXPORT_PRIVATE void decrementDeferralDepthAndGCIfNeeded();
+        void decrementDeferralDepthAndGCIfNeeded();
 
         const HeapType m_heapType;
         const size_t m_ramSize;
@@ -545,6 +545,37 @@ namespace JSC {
     }
 #endif
 
+
+inline void Heap::incrementDeferralDepth()
+{
+    RELEASE_ASSERT(m_deferralDepth < 100); // Sanity check to make sure this doesn't get ridiculous.
+    m_deferralDepth++;
+}
+
+inline void Heap::decrementDeferralDepth()
+{
+    RELEASE_ASSERT(m_deferralDepth >= 1);
+    m_deferralDepth--;
+}
+
+inline bool Heap::collectIfNecessaryOrDefer()
+{
+    if (isDeferred())
+        return false;
+
+    if (!shouldCollect())
+        return false;
+
+    collect();
+    return true;
+}
+
+inline void Heap::decrementDeferralDepthAndGCIfNeeded()
+{
+    decrementDeferralDepth();
+    collectIfNecessaryOrDefer();
+}
+
 } // namespace JSC
 
 #endif // Heap_h