Changeset 161429 in webkit
- Timestamp:
- Jan 7, 2014 9:39:52 AM (10 years ago)
- Location:
- trunk/Source/JavaScriptCore
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/ChangeLog
r161414 r161429 1 2014-01-06 Mark Hahnenberg <mhahnenberg@apple.com> 2 3 Heap::collect shouldn't be responsible for sweeping 4 https://bugs.webkit.org/show_bug.cgi?id=126556 5 6 Reviewed by Geoffrey Garen. 7 8 Sweeping happens at an awkward time during collection due to the fact that destructors can 9 cause arbitrary reentry into the VM. This patch separates collecting and sweeping, and delays 10 sweeping until after collection has completely finished. 11 12 * heap/Heap.cpp: 13 (JSC::Heap::collectAllGarbage): 14 (JSC::Heap::collect): 15 (JSC::Heap::collectIfNecessaryOrDefer): 16 * heap/Heap.h: 17 * heap/MarkedSpace.cpp: 18 (JSC::MarkedSpace::sweep): 19 * runtime/GCActivityCallback.cpp: 20 (JSC::DefaultGCActivityCallback::doWork): 21 1 22 2014-01-07 Mark Rowe <mrowe@apple.com> 2 23 -
trunk/Source/JavaScriptCore/heap/Heap.cpp
r161240 r161429 728 728 if (!m_isSafeToCollect) 729 729 return; 730 730 731 collect(); 732 733 SamplingRegion samplingRegion("Garbage Collection: Sweeping"); 731 734 DelayedReleaseScope delayedReleaseScope(m_objectSpace); 732 collect(DoSweep); 735 m_objectSpace.sweep(); 736 m_objectSpace.shrink(); 733 737 } 734 738 735 739 static double minute = 60.0; 736 740 737 void Heap::collect( SweepToggle sweepToggle)741 void Heap::collect() 738 742 { 739 743 #if ENABLE(ALLOCATION_LOGGING) … … 743 747 double before = 0; 744 748 if (Options::logGC()) { 745 dataLog("[GC ", sweepToggle == DoSweep ? " (eager sweep)" : "", ": ");749 dataLog("[GC: "); 746 750 before = currentTimeMS(); 747 751 } … … 816 820 } 817 821 818 if (sweepToggle == DoSweep) {819 SamplingRegion samplingRegion("Garbage Collection: Sweeping");820 GCPHASE(Sweeping);821 m_objectSpace.sweep();822 m_objectSpace.shrink();823 }824 825 822 m_sweeper->startSweeping(m_blockSnapshot); 826 823 m_bytesAbandoned = 0; … … 881 878 return false; 882 879 883 collect( DoNotSweep);880 collect(); 884 881 return true; 885 882 } -
trunk/Source/JavaScriptCore/heap/Heap.h
r161240 r161429 140 140 141 141 JS_EXPORT_PRIVATE void collectAllGarbage(); 142 enum SweepToggle { DoNotSweep, DoSweep };143 142 bool shouldCollect(); 144 void collect( SweepToggle);143 void collect(); 145 144 bool collectIfNecessaryOrDefer(); // Returns true if it did collect. 146 145 -
trunk/Source/JavaScriptCore/heap/MarkedSpace.cpp
r159515 r161429 121 121 void MarkedSpace::sweep() 122 122 { 123 if (Options::logGC()) 124 dataLog("Eagerly sweeping..."); 123 125 m_heap->sweeper()->willFinishSweeping(); 124 126 forEachBlock<Sweep>(); -
trunk/Source/JavaScriptCore/runtime/GCActivityCallback.cpp
r157537 r161429 96 96 } 97 97 #endif 98 heap->collect( Heap::DoNotSweep);98 heap->collect(); 99 99 } 100 100
Note: See TracChangeset
for help on using the changeset viewer.