Title: [118646] trunk/Source/_javascript_Core
- Revision
- 118646
- Author
- [email protected]
- Date
- 2012-05-27 21:56:01 -0700 (Sun, 27 May 2012)
Log Message
Weak pointer finalization should be lazy
https://bugs.webkit.org/show_bug.cgi?id=87599
Reviewed by Darin Adler.
* heap/Heap.cpp:
(JSC::Heap::collect): Don't force immediate finalization -- it will
happen lazily.
* heap/MarkedBlock.cpp:
(JSC::MarkedBlock::sweep): Sweep a block's weak set when sweeping the
block. The weak set may not have been swept yet, and this is our last
chance to run weak finalizers before we recycle the memory they reference.
* heap/MarkedBlock.h:
* heap/MarkedSpace.cpp:
(JSC::MarkedBlock::sweepWeakSets):
* heap/MarkedSpace.h:
(JSC::MarkedSpace::sweepWeakSets): Nixed sweepWeakSets because it's unused
now.
Modified Paths
Diff
Modified: trunk/Source/_javascript_Core/ChangeLog (118645 => 118646)
--- trunk/Source/_javascript_Core/ChangeLog 2012-05-28 04:39:30 UTC (rev 118645)
+++ trunk/Source/_javascript_Core/ChangeLog 2012-05-28 04:56:01 UTC (rev 118646)
@@ -1,3 +1,26 @@
+2012-05-27 Geoffrey Garen <[email protected]>
+
+ Weak pointer finalization should be lazy
+ https://bugs.webkit.org/show_bug.cgi?id=87599
+
+ Reviewed by Darin Adler.
+
+ * heap/Heap.cpp:
+ (JSC::Heap::collect): Don't force immediate finalization -- it will
+ happen lazily.
+
+ * heap/MarkedBlock.cpp:
+ (JSC::MarkedBlock::sweep): Sweep a block's weak set when sweeping the
+ block. The weak set may not have been swept yet, and this is our last
+ chance to run weak finalizers before we recycle the memory they reference.
+
+ * heap/MarkedBlock.h:
+ * heap/MarkedSpace.cpp:
+ (JSC::MarkedBlock::sweepWeakSets):
+ * heap/MarkedSpace.h:
+ (JSC::MarkedSpace::sweepWeakSets): Nixed sweepWeakSets because it's unused
+ now.
+
2012-05-26 Geoffrey Garen <[email protected]>
WebKit should be lazy-finalization-safe (esp. the DOM) v2
Modified: trunk/Source/_javascript_Core/heap/Heap.cpp (118645 => 118646)
--- trunk/Source/_javascript_Core/heap/Heap.cpp 2012-05-28 04:39:30 UTC (rev 118645)
+++ trunk/Source/_javascript_Core/heap/Heap.cpp 2012-05-28 04:56:01 UTC (rev 118646)
@@ -687,7 +687,6 @@
{
GCPHASE(FinalizeWeakHandles);
- m_objectSpace.sweepWeakSets();
m_globalData->smallStrings.finalizeSmallStrings();
}
Modified: trunk/Source/_javascript_Core/heap/MarkedBlock.cpp (118645 => 118646)
--- trunk/Source/_javascript_Core/heap/MarkedBlock.cpp 2012-05-28 04:39:30 UTC (rev 118645)
+++ trunk/Source/_javascript_Core/heap/MarkedBlock.cpp 2012-05-28 04:56:01 UTC (rev 118646)
@@ -114,6 +114,8 @@
{
HEAP_LOG_BLOCK_STATE_TRANSITION(this);
+ m_weakSet.sweep();
+
if (sweepMode == SweepOnly && !m_cellsNeedDestruction)
return FreeList();
Modified: trunk/Source/_javascript_Core/heap/MarkedBlock.h (118645 => 118646)
--- trunk/Source/_javascript_Core/heap/MarkedBlock.h 2012-05-28 04:39:30 UTC (rev 118645)
+++ trunk/Source/_javascript_Core/heap/MarkedBlock.h 2012-05-28 04:56:01 UTC (rev 118646)
@@ -133,7 +133,6 @@
void visitWeakSet(HeapRootVisitor&);
void reapWeakSet();
- void sweepWeakSet();
// While allocating from a free list, MarkedBlock temporarily has bogus
// cell liveness data. To restore accurate cell liveness data, call one
@@ -287,11 +286,6 @@
m_weakSet.reap();
}
- inline void MarkedBlock::sweepWeakSet()
- {
- m_weakSet.sweep();
- }
-
inline void MarkedBlock::didConsumeFreeList()
{
HEAP_LOG_BLOCK_STATE_TRANSITION(this);
Modified: trunk/Source/_javascript_Core/heap/MarkedSpace.cpp (118645 => 118646)
--- trunk/Source/_javascript_Core/heap/MarkedSpace.cpp 2012-05-28 04:39:30 UTC (rev 118645)
+++ trunk/Source/_javascript_Core/heap/MarkedSpace.cpp 2012-05-28 04:56:01 UTC (rev 118646)
@@ -77,10 +77,6 @@
void operator()(MarkedBlock* block) { block->reapWeakSet(); }
};
-struct SweepWeakSet : MarkedBlock::VoidFunctor {
- void operator()(MarkedBlock* block) { block->sweepWeakSet(); }
-};
-
MarkedSpace::MarkedSpace(Heap* heap)
: m_heap(heap)
{
@@ -142,11 +138,6 @@
forEachBlock<ReapWeakSet>();
}
-void MarkedSpace::sweepWeakSets()
-{
- forEachBlock<SweepWeakSet>();
-}
-
void MarkedSpace::canonicalizeCellLivenessData()
{
for (size_t cellSize = preciseStep; cellSize <= preciseCutoff; cellSize += preciseStep) {
Modified: trunk/Source/_javascript_Core/heap/MarkedSpace.h (118645 => 118646)
--- trunk/Source/_javascript_Core/heap/MarkedSpace.h 2012-05-28 04:39:30 UTC (rev 118645)
+++ trunk/Source/_javascript_Core/heap/MarkedSpace.h 2012-05-28 04:56:01 UTC (rev 118646)
@@ -85,7 +85,6 @@
void visitWeakSets(HeapRootVisitor&);
void reapWeakSets();
- void sweepWeakSets();
MarkedBlockSet& blocks() { return m_blocks; }
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes