Changeset 113141 in webkit for trunk/Source/JavaScriptCore/heap/Heap.cpp
- Timestamp:
- Apr 3, 2012, 10:28:13 PM (13 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/heap/Heap.cpp
r112624 r113141 314 314 , m_minBytesPerCycle(heapSizeForHint(heapSize)) 315 315 , m_lastFullGCSize(0) 316 , m_waterMark(0)317 316 , m_highWaterMark(m_minBytesPerCycle) 318 317 , m_operationInProgress(NoOperation) … … 320 319 , m_storageSpace(this) 321 320 , m_blockFreeingThreadShouldQuit(false) 322 , m_extraCost(0)323 321 , m_markListSet(0) 324 322 , m_activityCallback(DefaultGCActivityCallback::create(this)) … … 326 324 , m_sharedData(globalData) 327 325 , m_slotVisitor(m_sharedData) 326 , m_weakHeap(this) 328 327 , m_handleHeap(globalData) 329 328 , m_isSafeToCollect(false) … … 377 376 clearMarks(); 378 377 379 m_ handleHeap.finalizeWeakHandles();378 m_weakHeap.finalizeAll(); 380 379 m_globalData->smallStrings.finalizeSmallStrings(); 381 380 shrink(); … … 467 466 // collecting more frequently as long as it stays alive. 468 467 469 if (m_extraCost > maxExtraCost && m_extraCost > highWaterMark() / 2) 470 collectAllGarbage(); 471 m_extraCost += cost; 468 addToWaterMark(cost); 472 469 } 473 470 … … 688 685 } 689 686 690 // Weak handles must be marked last, because their owners use the set of691 // opaque roots to determine reachability.692 { 693 GCPHASE(Visiting WeakHandles);687 // Weak references must be marked last because their liveness depends on 688 // the liveness of the rest of the object graph. 689 { 690 GCPHASE(VisitingLiveWeakHandles); 694 691 while (true) { 695 m_ handleHeap.visitWeakHandles(heapRootVisitor);692 m_weakHeap.visitLiveWeakImpls(heapRootVisitor); 696 693 harvestWeakReferences(); 697 694 if (visitor.isEmpty()) … … 706 703 } 707 704 } 705 706 { 707 GCPHASE(VisitingDeadWeakHandles); 708 m_weakHeap.visitDeadWeakImpls(heapRootVisitor); 709 } 710 708 711 GCCOUNTER(VisitedValueCount, visitor.visitCount()); 709 712 … … 816 819 { 817 820 GCPHASE(FinalizeWeakHandles); 818 m_ handleHeap.finalizeWeakHandles();821 m_weakHeap.sweep(); 819 822 m_globalData->smallStrings.finalizeSmallStrings(); 820 823 } … … 847 850 if (fullGC) { 848 851 m_lastFullGCSize = newSize; 849 setHighWaterMark(max(proportionalBytes, m_minBytesPerCycle));852 m_highWaterMark = max(proportionalBytes, m_minBytesPerCycle); 850 853 } 851 854 double lastGCEndTime = WTF::currentTime(); … … 863 866 void Heap::resetAllocators() 864 867 { 865 m_extraCost = 0;866 868 m_objectSpace.resetAllocators(); 869 m_weakHeap.resetAllocator(); 867 870 } 868 871 … … 925 928 void Heap::addFinalizer(JSCell* cell, Finalizer finalizer) 926 929 { 927 Weak<JSCell> weak(*globalData(), cell, &m_finalizerOwner, reinterpret_cast<void*>(finalizer)); 928 weak.leakHandle(); // Balanced by FinalizerOwner::finalize(). 930 weakHeap()->allocate(cell, &m_finalizerOwner, reinterpret_cast<void*>(finalizer)); // Balanced by FinalizerOwner::finalize(). 929 931 } 930 932 931 933 void Heap::FinalizerOwner::finalize(Handle<Unknown> handle, void* context) 932 934 { 933 Weak<JSCell> weak(Weak<JSCell>::Adopt, handle);935 HandleSlot slot = handle.slot(); 934 936 Finalizer finalizer = reinterpret_cast<Finalizer>(context); 935 finalizer(weak.get()); 937 finalizer(slot->asCell()); 938 WeakHeap::deallocate(WeakImpl::asWeakImpl(slot)); 936 939 } 937 940
Note:
See TracChangeset
for help on using the changeset viewer.