Title: [165197] trunk/Source/_javascript_Core
Revision
165197
Author
[email protected]
Date
2014-03-06 10:47:57 -0800 (Thu, 06 Mar 2014)

Log Message

Drop unlinked function code on memory pressure.
<https://webkit.org/b/129789>

Make VM::discardAllCode() also drop UnlinkedFunctionCodeBlocks that
are not currently being compiled.

4.5 MB progression on Membuster.

Reviewed by Geoffrey Garen.

* heap/Heap.cpp:
(JSC::Heap::deleteAllUnlinkedFunctionCode):
* heap/Heap.h:
* runtime/VM.cpp:
(JSC::VM::discardAllCode):

Modified Paths

Diff

Modified: trunk/Source/_javascript_Core/ChangeLog (165196 => 165197)


--- trunk/Source/_javascript_Core/ChangeLog	2014-03-06 18:33:18 UTC (rev 165196)
+++ trunk/Source/_javascript_Core/ChangeLog	2014-03-06 18:47:57 UTC (rev 165197)
@@ -1,3 +1,21 @@
+2014-03-06  Andreas Kling  <[email protected]>
+
+        Drop unlinked function code on memory pressure.
+        <https://webkit.org/b/129789>
+
+        Make VM::discardAllCode() also drop UnlinkedFunctionCodeBlocks that
+        are not currently being compiled.
+
+        4.5 MB progression on Membuster.
+
+        Reviewed by Geoffrey Garen.
+
+        * heap/Heap.cpp:
+        (JSC::Heap::deleteAllUnlinkedFunctionCode):
+        * heap/Heap.h:
+        * runtime/VM.cpp:
+        (JSC::VM::discardAllCode):
+
 2014-03-06  Filip Pizlo  <[email protected]>
 
         Clarify how we deal with "special" registers

Modified: trunk/Source/_javascript_Core/heap/Heap.cpp (165196 => 165197)


--- trunk/Source/_javascript_Core/heap/Heap.cpp	2014-03-06 18:33:18 UTC (rev 165196)
+++ trunk/Source/_javascript_Core/heap/Heap.cpp	2014-03-06 18:47:57 UTC (rev 165197)
@@ -802,6 +802,15 @@
     m_codeBlocks.deleteUnmarkedAndUnreferenced();
 }
 
+void Heap::deleteAllUnlinkedFunctionCode()
+{
+    for (ExecutableBase* current = m_compiledCode.head(); current; current = current->next()) {
+        if (!current->isFunctionExecutable())
+            continue;
+        static_cast<FunctionExecutable*>(current)->clearUnlinkedCodeForRecompilationIfNotCompiling();
+    }
+}
+
 void Heap::deleteUnmarkedCompiledCode()
 {
     GCPHASE(DeleteCodeBlocks);

Modified: trunk/Source/_javascript_Core/heap/Heap.h (165196 => 165197)


--- trunk/Source/_javascript_Core/heap/Heap.h	2014-03-06 18:33:18 UTC (rev 165196)
+++ trunk/Source/_javascript_Core/heap/Heap.h	2014-03-06 18:47:57 UTC (rev 165197)
@@ -190,6 +190,7 @@
         void increaseLastGCLength(double amount) { m_lastGCLength += amount; }
 
         JS_EXPORT_PRIVATE void deleteAllCompiledCode();
+        void deleteAllUnlinkedFunctionCode();
 
         void didAllocate(size_t);
         void didAbandon(size_t);

Modified: trunk/Source/_javascript_Core/runtime/VM.cpp (165196 => 165197)


--- trunk/Source/_javascript_Core/runtime/VM.cpp	2014-03-06 18:33:18 UTC (rev 165196)
+++ trunk/Source/_javascript_Core/runtime/VM.cpp	2014-03-06 18:47:57 UTC (rev 165197)
@@ -525,6 +525,7 @@
     waitForCompilationsToComplete();
     m_codeCache->clear();
     heap.deleteAllCompiledCode();
+    heap.deleteAllUnlinkedFunctionCode();
     heap.reportAbandonedObjectGraph();
 }
 
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to