Changeset 118646 in webkit


Ignore:
Timestamp:
May 27, 2012 9:56:01 PM (12 years ago)
Author:
ggaren@apple.com
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.

Location:
trunk/Source/JavaScriptCore
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/JavaScriptCore/ChangeLog

    r118616 r118646  
     12012-05-27  Geoffrey Garen  <ggaren@apple.com>
     2
     3        Weak pointer finalization should be lazy
     4        https://bugs.webkit.org/show_bug.cgi?id=87599
     5
     6        Reviewed by Darin Adler.
     7
     8        * heap/Heap.cpp:
     9        (JSC::Heap::collect): Don't force immediate finalization -- it will
     10        happen lazily.
     11
     12        * heap/MarkedBlock.cpp:
     13        (JSC::MarkedBlock::sweep): Sweep a block's weak set when sweeping the
     14        block. The weak set may not have been swept yet, and this is our last
     15        chance to run weak finalizers before we recycle the memory they reference.
     16
     17        * heap/MarkedBlock.h:
     18        * heap/MarkedSpace.cpp:
     19        (JSC::MarkedBlock::sweepWeakSets):
     20        * heap/MarkedSpace.h:
     21        (JSC::MarkedSpace::sweepWeakSets): Nixed sweepWeakSets because it's unused
     22        now.
     23
    1242012-05-26  Geoffrey Garen  <ggaren@apple.com>
    225
  • trunk/Source/JavaScriptCore/heap/Heap.cpp

    r118416 r118646  
    688688    {
    689689        GCPHASE(FinalizeWeakHandles);
    690         m_objectSpace.sweepWeakSets();
    691690        m_globalData->smallStrings.finalizeSmallStrings();
    692691    }
  • trunk/Source/JavaScriptCore/heap/MarkedBlock.cpp

    r118616 r118646  
    115115    HEAP_LOG_BLOCK_STATE_TRANSITION(this);
    116116
     117    m_weakSet.sweep();
     118
    117119    if (sweepMode == SweepOnly && !m_cellsNeedDestruction)
    118120        return FreeList();
  • trunk/Source/JavaScriptCore/heap/MarkedBlock.h

    r118416 r118646  
    134134        void visitWeakSet(HeapRootVisitor&);
    135135        void reapWeakSet();
    136         void sweepWeakSet();
    137136
    138137        // While allocating from a free list, MarkedBlock temporarily has bogus
     
    286285    {
    287286        m_weakSet.reap();
    288     }
    289 
    290     inline void MarkedBlock::sweepWeakSet()
    291     {
    292         m_weakSet.sweep();
    293287    }
    294288
  • trunk/Source/JavaScriptCore/heap/MarkedSpace.cpp

    r118416 r118646  
    7878};
    7979
    80 struct SweepWeakSet : MarkedBlock::VoidFunctor {
    81     void operator()(MarkedBlock* block) { block->sweepWeakSet(); }
    82 };
    83 
    8480MarkedSpace::MarkedSpace(Heap* heap)
    8581    : m_heap(heap)
     
    141137{
    142138    forEachBlock<ReapWeakSet>();
    143 }
    144 
    145 void MarkedSpace::sweepWeakSets()
    146 {
    147     forEachBlock<SweepWeakSet>();
    148139}
    149140
  • trunk/Source/JavaScriptCore/heap/MarkedSpace.h

    r118416 r118646  
    8686    void visitWeakSets(HeapRootVisitor&);
    8787    void reapWeakSets();
    88     void sweepWeakSets();
    8988
    9089    MarkedBlockSet& blocks() { return m_blocks; }
Note: See TracChangeset for help on using the changeset viewer.