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