Title: [161914] trunk/Source/_javascript_Core
Revision
161914
Author
mhahnenb...@apple.com
Date
2014-01-13 15:50:58 -0800 (Mon, 13 Jan 2014)

Log Message

Performance regression on dromaeo due to generational marking
https://bugs.webkit.org/show_bug.cgi?id=126901

Reviewed by Oliver Hunt.

We were seeing some performance regression with ENABLE_GGC == 0, so this patch
ifdefs out more things to get rid of the additional overhead.

* heap/Heap.cpp:
(JSC::Heap::markRoots):
(JSC::Heap::writeBarrier):
* heap/MarkedBlock.cpp:
(JSC::MarkedBlock::clearMarks):
(JSC::MarkedBlock::clearMarksWithCollectionType):
* heap/MarkedSpace.cpp:
(JSC::MarkedSpace::resetAllocators):
* heap/MarkedSpace.h:
(JSC::MarkedSpace::didAllocateInBlock):
* heap/SlotVisitorInlines.h:
(JSC::SlotVisitor::internalAppend):
(JSC::SlotVisitor::reportExtraMemoryUsage):

Modified Paths

Diff

Modified: trunk/Source/_javascript_Core/ChangeLog (161913 => 161914)


--- trunk/Source/_javascript_Core/ChangeLog	2014-01-13 23:23:52 UTC (rev 161913)
+++ trunk/Source/_javascript_Core/ChangeLog	2014-01-13 23:50:58 UTC (rev 161914)
@@ -1,3 +1,27 @@
+2014-01-13  Mark Hahnenberg  <mhahnenb...@apple.com>
+
+        Performance regression on dromaeo due to generational marking
+        https://bugs.webkit.org/show_bug.cgi?id=126901
+
+        Reviewed by Oliver Hunt.
+
+        We were seeing some performance regression with ENABLE_GGC == 0, so this patch
+        ifdefs out more things to get rid of the additional overhead.
+
+        * heap/Heap.cpp:
+        (JSC::Heap::markRoots):
+        (JSC::Heap::writeBarrier):
+        * heap/MarkedBlock.cpp:
+        (JSC::MarkedBlock::clearMarks):
+        (JSC::MarkedBlock::clearMarksWithCollectionType):
+        * heap/MarkedSpace.cpp:
+        (JSC::MarkedSpace::resetAllocators):
+        * heap/MarkedSpace.h:
+        (JSC::MarkedSpace::didAllocateInBlock):
+        * heap/SlotVisitorInlines.h:
+        (JSC::SlotVisitor::internalAppend):
+        (JSC::SlotVisitor::reportExtraMemoryUsage):
+
 2014-01-13  Brian Burg  <bb...@apple.com>
 
         Web Inspector: protocol generator should support integer-typed declarations

Modified: trunk/Source/_javascript_Core/heap/Heap.cpp (161913 => 161914)


--- trunk/Source/_javascript_Core/heap/Heap.cpp	2014-01-13 23:23:52 UTC (rev 161913)
+++ trunk/Source/_javascript_Core/heap/Heap.cpp	2014-01-13 23:50:58 UTC (rev 161914)
@@ -489,8 +489,10 @@
     visitor.setup();
     HeapRootVisitor heapRootVisitor(visitor);
 
+#if ENABLE(GGC)
     Vector<const JSCell*> rememberedSet(m_slotVisitor.markStack().size());
     m_slotVisitor.markStack().fillVector(rememberedSet);
+#endif
 
     {
         ParallelModeEnabler enabler(visitor);
@@ -595,6 +597,7 @@
         }
     }
 
+#if ENABLE(GGC)
     {
         GCPHASE(ClearRememberedSet);
         for (unsigned i = 0; i < rememberedSet.size(); ++i) {
@@ -602,6 +605,7 @@
             MarkedBlock::blockFor(cell)->clearRemembered(cell);
         }
     }
+#endif
 
     GCCOUNTER(VisitedValueCount, visitor.visitCount());
 
@@ -1076,11 +1080,15 @@
 
 void Heap::writeBarrier(const JSCell* from)
 {
+#if ENABLE(GGC)
     ASSERT_GC_OBJECT_LOOKS_VALID(const_cast<JSCell*>(from));
     if (!from || !isMarked(from))
         return;
     Heap* heap = Heap::heap(from);
     heap->addToRememberedSet(from);
+#else
+    UNUSED_PARAM(from);
+#endif
 }
 
 void Heap::flushWriteBarrierBuffer(JSCell* cell)

Modified: trunk/Source/_javascript_Core/heap/MarkedBlock.cpp (161913 => 161914)


--- trunk/Source/_javascript_Core/heap/MarkedBlock.cpp	2014-01-13 23:23:52 UTC (rev 161913)
+++ trunk/Source/_javascript_Core/heap/MarkedBlock.cpp	2014-01-13 23:50:58 UTC (rev 161914)
@@ -199,10 +199,14 @@
 
 void MarkedBlock::clearMarks()
 {
+#if ENABLE(GGC)
     if (heap()->operationInProgress() == JSC::EdenCollection)
         this->clearMarksWithCollectionType<EdenCollection>();
     else
         this->clearMarksWithCollectionType<FullCollection>();
+#else
+    this->clearMarksWithCollectionType<FullCollection>();
+#endif
 }
 
 void MarkedBlock::clearRememberedSet()
@@ -219,7 +223,9 @@
     ASSERT(m_state != New && m_state != FreeListed);
     if (collectionType == FullCollection) {
         m_marks.clearAll();
+#if ENABLE(GGC)
         m_rememberedSet.clearAll();
+#endif
     }
 
     // This will become true at the end of the mark phase. We set it now to

Modified: trunk/Source/_javascript_Core/heap/MarkedSpace.cpp (161913 => 161914)


--- trunk/Source/_javascript_Core/heap/MarkedSpace.cpp	2014-01-13 23:23:52 UTC (rev 161913)
+++ trunk/Source/_javascript_Core/heap/MarkedSpace.cpp	2014-01-13 23:50:58 UTC (rev 161914)
@@ -145,7 +145,9 @@
     m_normalDestructorSpace.largeAllocator.reset();
     m_immortalStructureDestructorSpace.largeAllocator.reset();
 
+#if ENABLE(GGC)
     m_blocksWithNewObjects.clear();
+#endif
 }
 
 void MarkedSpace::visitWeakSets(HeapRootVisitor& heapRootVisitor)

Modified: trunk/Source/_javascript_Core/heap/MarkedSpace.h (161913 => 161914)


--- trunk/Source/_javascript_Core/heap/MarkedSpace.h	2014-01-13 23:23:52 UTC (rev 161913)
+++ trunk/Source/_javascript_Core/heap/MarkedSpace.h	2014-01-13 23:50:58 UTC (rev 161914)
@@ -277,7 +277,11 @@
 
 inline void MarkedSpace::didAllocateInBlock(MarkedBlock* block)
 {
+#if ENABLE(GGC)
     m_blocksWithNewObjects.append(block);
+#else
+    UNUSED_PARAM(block);
+#endif
 }
 
 inline void MarkedSpace::clearRememberedSet()

Modified: trunk/Source/_javascript_Core/heap/SlotVisitorInlines.h (161913 => 161914)


--- trunk/Source/_javascript_Core/heap/SlotVisitorInlines.h	2014-01-13 23:23:52 UTC (rev 161913)
+++ trunk/Source/_javascript_Core/heap/SlotVisitorInlines.h	2014-01-13 23:50:58 UTC (rev 161914)
@@ -101,7 +101,6 @@
         return;
 
     m_bytesVisited += MarkedBlock::blockFor(cell)->cellSize();
-    m_visitCount++;
         
     MARK_LOG_CHILD(*this, cell);
 
@@ -242,9 +241,13 @@
     
 inline void SlotVisitor::reportExtraMemoryUsage(JSCell* owner, size_t size)
 {
+#if ENABLE(GGC)
     // We don't want to double-count the extra memory that was reported in previous collections.
     if (heap()->operationInProgress() == EdenCollection && MarkedBlock::blockFor(owner)->isRemembered(owner))
         return;
+#else
+    UNUSED_PARAM(owner);
+#endif
 
     size_t* counter = &m_shared.m_vm->heap.m_extraMemoryUsage;
     
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to