Changeset 226667 in webkit for trunk/Source/JavaScriptCore/heap/Heap.cpp
- Timestamp:
- Jan 9, 2018, 4:30:38 PM (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/heap/Heap.cpp
r226437 r226667 1 1 /* 2 * Copyright (C) 2003-201 7Apple Inc. All rights reserved.2 * Copyright (C) 2003-2018 Apple Inc. All rights reserved. 3 3 * Copyright (C) 2007 Eric Seidel <[email protected]> 4 4 * … … 368 368 } 369 369 370 m_isShuttingDown = true; 371 370 372 RELEASE_ASSERT(!m_vm->entryScope); 371 373 RELEASE_ASSERT(m_mutatorState == MutatorState::Running); … … 437 439 438 440 m_arrayBuffers.lastChanceToFinalize(); 439 m_codeBlocks->lastChanceToFinalize(*m_vm);440 441 m_objectSpace.stopAllocating(); 441 442 m_objectSpace.lastChanceToFinalize(); … … 559 560 560 561 template<typename CellType, typename CellSet> 561 void Heap::finalize UnconditionalFinalizers(CellSet& cellSet)562 void Heap::finalizeMarkedUnconditionalFinalizers(CellSet& cellSet) 562 563 { 563 564 cellSet.forEachMarkedCell( … … 567 568 } 568 569 569 template<typename CellType> 570 void Heap::finalizeUnconditionalFinalizersInIsoSubspace() 571 { 572 JSC::subspaceFor<CellType>(*vm())->forEachMarkedCell( 573 [&] (HeapCell* cell, HeapCell::Kind) { 574 static_cast<CellType*>(cell)->finalizeUnconditionally(*vm()); 570 void Heap::finalizeUnconditionalFinalizers() 571 { 572 finalizeMarkedUnconditionalFinalizers<InferredType>(vm()->inferredTypesWithFinalizers); 573 finalizeMarkedUnconditionalFinalizers<InferredValue>(vm()->inferredValuesWithFinalizers); 574 vm()->forEachCodeBlockSpace( 575 [&] (auto& space) { 576 this->finalizeMarkedUnconditionalFinalizers<CodeBlock>(space.finalizerSet); 575 577 }); 576 } 577 578 void Heap::finalizeUnconditionalFinalizers() 579 { 580 finalizeUnconditionalFinalizers<InferredType>(vm()->inferredTypesWithFinalizers); 581 finalizeUnconditionalFinalizers<InferredValue>(vm()->inferredValuesWithFinalizers); 582 finalizeUnconditionalFinalizersInIsoSubspace<JSWeakSet>(); 583 finalizeUnconditionalFinalizersInIsoSubspace<JSWeakMap>(); 578 finalizeMarkedUnconditionalFinalizers<ExecutableToCodeBlockEdge>(vm()->executableToCodeBlockEdgesWithFinalizers); 579 finalizeMarkedUnconditionalFinalizers<JSWeakSet>(vm()->weakSetSpace); 580 finalizeMarkedUnconditionalFinalizers<JSWeakMap>(vm()->weakMapSpace); 584 581 585 582 while (m_unconditionalFinalizers.hasNext()) { … … 678 675 { 679 676 TimingScope timingScope(*this, "Heap::beginMarking"); 680 if (m_collectionScope == CollectionScope::Full)681 m_codeBlocks->clearMarksForFullCollection();682 677 m_jitStubRoutines->clearMarks(); 683 678 m_objectSpace.beginMarking(); … … 940 935 { 941 936 clearUnmarkedExecutables(); 942 m_codeBlocks->deleteUnmarkedAndUnreferenced(*m_vm, *m_lastCollectionScope);943 937 m_jitStubRoutines->deleteUnmarkedJettisonedStubRoutines(); 944 938 } … … 2089 2083 { 2090 2084 m_objectSpace.sweepLargeAllocations(); 2091 2092 auto sweepBlock = [&] (MarkedBlock::Handle* handle) { 2093 handle->sweep(nullptr); 2094 }; 2095 2096 vm()->eagerlySweptDestructibleObjectSpace.forEachMarkedBlock(sweepBlock); 2085 vm()->forEachCodeBlockSpace([] (auto& space) { space.space.sweep(); }); 2086 vm()->eagerlySweptDestructibleObjectSpace.sweep(); 2097 2087 } 2098 2088 … … 2469 2459 } 2470 2460 2471 void Heap::forEachCodeBlockImpl(const ScopedLambda< bool(CodeBlock*)>& func)2461 void Heap::forEachCodeBlockImpl(const ScopedLambda<void(CodeBlock*)>& func) 2472 2462 { 2473 2463 // We don't know the full set of CodeBlocks until compilation has terminated. … … 2477 2467 } 2478 2468 2479 void Heap::forEachCodeBlockIgnoringJITPlansImpl(const AbstractLocker& locker, const ScopedLambda< bool(CodeBlock*)>& func)2469 void Heap::forEachCodeBlockIgnoringJITPlansImpl(const AbstractLocker& locker, const ScopedLambda<void(CodeBlock*)>& func) 2480 2470 { 2481 2471 return m_codeBlocks->iterate(locker, func); … … 2713 2703 }, 2714 2704 ConstraintVolatility::GreyedByMarking); 2705 2706 m_constraintSet->add( 2707 "O", "Output", 2708 [this] (SlotVisitor& slotVisitor) { 2709 VM& vm = slotVisitor.vm(); 2710 2711 auto callOutputConstraint = [] (SlotVisitor& slotVisitor, HeapCell* heapCell, HeapCell::Kind) { 2712 VM& vm = slotVisitor.vm(); 2713 JSCell* cell = static_cast<JSCell*>(heapCell); 2714 cell->methodTable(vm)->visitOutputConstraints(cell, slotVisitor); 2715 }; 2716 2717 auto add = [&] (auto& set) { 2718 slotVisitor.addParallelConstraintTask(set.forEachMarkedCellInParallel(callOutputConstraint)); 2719 }; 2720 2721 add(vm.executableToCodeBlockEdgesWithConstraints); 2722 }, 2723 ConstraintVolatility::GreyedByMarking, 2724 ConstraintParallelism::Parallel); 2715 2725 2716 2726 #if ENABLE(DFG_JIT)
Note:
See TracChangeset
for help on using the changeset viewer.