- Revision
- 184666
- Author
- [email protected]
- Date
- 2015-05-20 15:25:20 -0700 (Wed, 20 May 2015)
Log Message
Remove unused MarkedBlock::m_rememberedSet.
<https://webkit.org/b/145224>
Reviewed by Mark Hahnenberg.
The MarkedBlock had a copy of the remembered bit for each of its cells,
and we were maintaining that bitmap despite no one actually ever consulting it.
This patch removes MarkedBlock::m_rememberedSet, freeing up 128 bytes in each
block and making write barriers a little faster.
* heap/Heap.cpp:
(JSC::Heap::clearRememberedSet):
(JSC::Heap::addToRememberedSet):
* heap/HeapInlines.h:
(JSC::Heap::isRemembered):
* heap/MarkedBlock.cpp:
(JSC::MarkedBlock::clearRememberedSet): Deleted.
(JSC::MarkedBlock::clearMarksWithCollectionType):
* heap/MarkedBlock.h:
(JSC::MarkedBlock::setRemembered): Deleted.
(JSC::MarkedBlock::clearRemembered): Deleted.
(JSC::MarkedBlock::atomicClearRemembered): Deleted.
(JSC::MarkedBlock::isRemembered): Deleted.
* heap/MarkedSpace.h:
(JSC::ClearRememberedSet::operator()): Deleted.
(JSC::MarkedSpace::clearRememberedSet): Deleted.
Modified Paths
Diff
Modified: trunk/Source/_javascript_Core/ChangeLog (184665 => 184666)
--- trunk/Source/_javascript_Core/ChangeLog 2015-05-20 22:23:23 UTC (rev 184665)
+++ trunk/Source/_javascript_Core/ChangeLog 2015-05-20 22:25:20 UTC (rev 184666)
@@ -1,5 +1,35 @@
2015-05-20 Andreas Kling <[email protected]>
+ Remove unused MarkedBlock::m_rememberedSet.
+ <https://webkit.org/b/145224>
+
+ Reviewed by Mark Hahnenberg.
+
+ The MarkedBlock had a copy of the remembered bit for each of its cells,
+ and we were maintaining that bitmap despite no one actually ever consulting it.
+
+ This patch removes MarkedBlock::m_rememberedSet, freeing up 128 bytes in each
+ block and making write barriers a little faster.
+
+ * heap/Heap.cpp:
+ (JSC::Heap::clearRememberedSet):
+ (JSC::Heap::addToRememberedSet):
+ * heap/HeapInlines.h:
+ (JSC::Heap::isRemembered):
+ * heap/MarkedBlock.cpp:
+ (JSC::MarkedBlock::clearRememberedSet): Deleted.
+ (JSC::MarkedBlock::clearMarksWithCollectionType):
+ * heap/MarkedBlock.h:
+ (JSC::MarkedBlock::setRemembered): Deleted.
+ (JSC::MarkedBlock::clearRemembered): Deleted.
+ (JSC::MarkedBlock::atomicClearRemembered): Deleted.
+ (JSC::MarkedBlock::isRemembered): Deleted.
+ * heap/MarkedSpace.h:
+ (JSC::ClearRememberedSet::operator()): Deleted.
+ (JSC::MarkedSpace::clearRememberedSet): Deleted.
+
+2015-05-20 Andreas Kling <[email protected]>
+
Eden collections should extend the IncrementalSweeper work list, not replace it.
<https://webkit.org/b/145213>
<rdar://problem/21002666>
Modified: trunk/Source/_javascript_Core/heap/Heap.cpp (184665 => 184666)
--- trunk/Source/_javascript_Core/heap/Heap.cpp 2015-05-20 22:23:23 UTC (rev 184665)
+++ trunk/Source/_javascript_Core/heap/Heap.cpp 2015-05-20 22:25:20 UTC (rev 184666)
@@ -798,10 +798,8 @@
{
#if ENABLE(GGC)
GCPHASE(ClearRememberedSet);
- for (auto* cell : rememberedSet) {
- MarkedBlock::blockFor(cell)->clearRemembered(cell);
+ for (auto* cell : rememberedSet)
const_cast<JSCell*>(cell)->setRemembered(false);
- }
#else
UNUSED_PARAM(rememberedSet);
#endif
@@ -975,7 +973,6 @@
ASSERT(!Options::enableConcurrentJIT() || !isCompilationThread());
if (isRemembered(cell))
return;
- MarkedBlock::blockFor(cell)->setRemembered(cell);
const_cast<JSCell*>(cell)->setRemembered(true);
m_slotVisitor.unconditionallyAppend(const_cast<JSCell*>(cell));
}
Modified: trunk/Source/_javascript_Core/heap/HeapInlines.h (184665 => 184666)
--- trunk/Source/_javascript_Core/heap/HeapInlines.h 2015-05-20 22:23:23 UTC (rev 184665)
+++ trunk/Source/_javascript_Core/heap/HeapInlines.h 2015-05-20 22:25:20 UTC (rev 184666)
@@ -75,7 +75,6 @@
const JSCell* cell = static_cast<const JSCell*>(ptr);
ASSERT(cell);
ASSERT(!Options::enableConcurrentJIT() || !isCompilationThread());
- ASSERT(MarkedBlock::blockFor(cell)->isRemembered(cell) == cell->isRemembered());
return cell->isRemembered();
}
Modified: trunk/Source/_javascript_Core/heap/MarkedBlock.cpp (184665 => 184666)
--- trunk/Source/_javascript_Core/heap/MarkedBlock.cpp 2015-05-20 22:23:23 UTC (rev 184665)
+++ trunk/Source/_javascript_Core/heap/MarkedBlock.cpp 2015-05-20 22:25:20 UTC (rev 184666)
@@ -218,11 +218,6 @@
#endif
}
-void MarkedBlock::clearRememberedSet()
-{
- m_rememberedSet.clearAll();
-}
-
template <HeapOperation collectionType>
void MarkedBlock::clearMarksWithCollectionType()
{
@@ -232,9 +227,6 @@
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
// avoid an extra pass to do so later.
m_state = Marked;
Modified: trunk/Source/_javascript_Core/heap/MarkedBlock.h (184665 => 184666)
--- trunk/Source/_javascript_Core/heap/MarkedBlock.h 2015-05-20 22:23:23 UTC (rev 184665)
+++ trunk/Source/_javascript_Core/heap/MarkedBlock.h 2015-05-20 22:25:20 UTC (rev 184666)
@@ -147,7 +147,6 @@
// and was successfully cleared and false otherwise.
bool clearNewlyAllocated();
void clearMarks();
- void clearRememberedSet();
template <HeapOperation collectionType>
void clearMarksWithCollectionType();
@@ -209,10 +208,8 @@
size_t m_endAtom; // This is a fuzzy end. Always test for < m_endAtom.
#if ENABLE(PARALLEL_GC)
WTF::Bitmap<atomsPerBlock, WTF::BitmapAtomic, uint8_t> m_marks;
- WTF::Bitmap<atomsPerBlock, WTF::BitmapAtomic, uint8_t> m_rememberedSet;
#else
WTF::Bitmap<atomsPerBlock, WTF::BitmapNotAtomic, uint8_t> m_marks;
- WTF::Bitmap<atomsPerBlock, WTF::BitmapNotAtomic, uint8_t> m_rememberedSet;
#endif
std::unique_ptr<WTF::Bitmap<atomsPerBlock>> m_newlyAllocated;
@@ -347,26 +344,6 @@
return (reinterpret_cast<Bits>(p) - reinterpret_cast<Bits>(this)) / atomSize;
}
- inline void MarkedBlock::setRemembered(const void* p)
- {
- m_rememberedSet.set(atomNumber(p));
- }
-
- inline void MarkedBlock::clearRemembered(const void* p)
- {
- m_rememberedSet.clear(atomNumber(p));
- }
-
- inline void MarkedBlock::atomicClearRemembered(const void* p)
- {
- m_rememberedSet.concurrentTestAndClear(atomNumber(p));
- }
-
- inline bool MarkedBlock::isRemembered(const void* p)
- {
- return m_rememberedSet.get(atomNumber(p));
- }
-
inline bool MarkedBlock::isMarked(const void* p)
{
return m_marks.get(atomNumber(p));
Modified: trunk/Source/_javascript_Core/heap/MarkedSpace.h (184665 => 184666)
--- trunk/Source/_javascript_Core/heap/MarkedSpace.h 2015-05-20 22:23:23 UTC (rev 184665)
+++ trunk/Source/_javascript_Core/heap/MarkedSpace.h 2015-05-20 22:25:20 UTC (rev 184666)
@@ -51,13 +51,6 @@
}
};
-struct ClearRememberedSet : MarkedBlock::VoidFunctor {
- void operator()(MarkedBlock* block)
- {
- block->clearRememberedSet();
- }
-};
-
struct Sweep : MarkedBlock::VoidFunctor {
void operator()(MarkedBlock* block) { block->sweep(); }
};
@@ -142,7 +135,6 @@
void didAllocateInBlock(MarkedBlock*);
void clearMarks();
- void clearRememberedSet();
void clearNewlyAllocated();
void sweep();
void zombifySweep();
@@ -277,11 +269,6 @@
#endif
}
-inline void MarkedSpace::clearRememberedSet()
-{
- forEachBlock<ClearRememberedSet>();
-}
-
inline size_t MarkedSpace::objectCount()
{
return forEachBlock<MarkCount>();