Changeset 105442 in webkit for trunk/Source/JavaScriptCore/heap/Heap.cpp
- Timestamp:
- Jan 19, 2012, 1:49:56 PM (13 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/heap/Heap.cpp
r103083 r105442 22 22 #include "Heap.h" 23 23 24 #include "BumpSpace.h" 25 #include "BumpSpaceInlineMethods.h" 24 26 #include "CodeBlock.h" 25 27 #include "ConservativeRoots.h" … … 312 314 , m_minBytesPerCycle(heapSizeForHint(heapSize)) 313 315 , m_lastFullGCSize(0) 316 , m_waterMark(0) 317 , m_highWaterMark(m_minBytesPerCycle) 314 318 , m_operationInProgress(NoOperation) 315 319 , m_objectSpace(this) 320 , m_storageSpace(this) 316 321 , m_blockFreeingThreadShouldQuit(false) 317 322 , m_extraCost(0) … … 325 330 , m_globalData(globalData) 326 331 { 327 m_objectSpace.setHighWaterMark(m_minBytesPerCycle);328 332 (*m_activityCallback)(); 329 333 m_numberOfFreeBlocks = 0; … … 331 335 332 336 ASSERT(m_blockFreeingThread); 337 m_storageSpace.init(); 333 338 } 334 339 … … 434 439 block = 0; 435 440 else { 436 block = m_freeBlocks.removeHead();441 block = static_cast<MarkedBlock*>(m_freeBlocks.removeHead()); 437 442 ASSERT(block); 438 443 m_numberOfFreeBlocks--; … … 461 466 // collecting more frequently as long as it stays alive. 462 467 463 if (m_extraCost > maxExtraCost && m_extraCost > m_objectSpace.highWaterMark() / 2)468 if (m_extraCost > maxExtraCost && m_extraCost > highWaterMark() / 2) 464 469 collectAllGarbage(); 465 470 m_extraCost += cost; … … 510 515 m_tempSortingVectors.removeLast(); 511 516 } 512 517 513 518 void Heap::markTempSortVectors(HeapRootVisitor& heapRootVisitor) 514 519 { … … 548 553 CRASH(); 549 554 m_operationInProgress = Collection; 550 ConservativeRoots registerFileRoots(&m_objectSpace.blocks() );555 ConservativeRoots registerFileRoots(&m_objectSpace.blocks(), &m_storageSpace); 551 556 registerFile().gatherConservativeRoots(registerFileRoots); 552 557 size_t registerFileRootCount = registerFileRoots.size(); … … 574 579 // We gather conservative roots before clearing mark bits because conservative 575 580 // gathering uses the mark bits to determine whether a reference is valid. 576 ConservativeRoots machineThreadRoots(&m_objectSpace.blocks() );581 ConservativeRoots machineThreadRoots(&m_objectSpace.blocks(), &m_storageSpace); 577 582 { 578 583 GCPHASE(GatherConservativeRoots); … … 580 585 } 581 586 582 ConservativeRoots registerFileRoots(&m_objectSpace.blocks() );587 ConservativeRoots registerFileRoots(&m_objectSpace.blocks(), &m_storageSpace); 583 588 m_dfgCodeBlocks.clearMarks(); 584 589 { … … 598 603 } 599 604 605 m_storageSpace.startedCopying(); 600 606 SlotVisitor& visitor = m_slotVisitor; 601 607 HeapRootVisitor heapRootVisitor(visitor); … … 701 707 GCCOUNTER(VisitedValueCount, visitor.visitCount()); 702 708 709 visitor.doneCopying(); 703 710 visitor.reset(); 704 711 m_sharedData.reset(); 712 m_storageSpace.doneCopying(); 705 713 706 714 m_operationInProgress = NoOperation; … … 823 831 // proportion is a bit arbitrary. A 2X multiplier gives a 1:1 (heap size : 824 832 // new bytes allocated) proportion, and seems to work well in benchmarks. 825 size_t newSize = size() ;833 size_t newSize = size() + m_storageSpace.totalMemoryUtilized(); 826 834 size_t proportionalBytes = 2 * newSize; 827 835 if (fullGC) { 828 836 m_lastFullGCSize = newSize; 829 m_objectSpace.setHighWaterMark(max(proportionalBytes, m_minBytesPerCycle));837 setHighWaterMark(max(proportionalBytes, m_minBytesPerCycle)); 830 838 } 831 839 JAVASCRIPTCORE_GC_END(); … … 888 896 block = 0; 889 897 else { 890 block = m_freeBlocks.removeHead();898 block = static_cast<MarkedBlock*>(m_freeBlocks.removeHead()); 891 899 ASSERT(block); 892 900 m_numberOfFreeBlocks--;
Note:
See TracChangeset
for help on using the changeset viewer.