size_t CopiedSpace::capacity() { size_t calculatedCapacity = 0; for (CopiedBlock* block = static_cast<CopiedBlock*>(m_toSpace->head()); block; block = static_cast<CopiedBlock*>(block->next())) calculatedCapacity += block->capacity(); for (CopiedBlock* block = static_cast<CopiedBlock*>(m_fromSpace->head()); block; block = static_cast<CopiedBlock*>(block->next())) calculatedCapacity += block->capacity(); for (CopiedBlock* block = static_cast<CopiedBlock*>(m_oversizeBlocks.head()); block; block = static_cast<CopiedBlock*>(block->next())) calculatedCapacity += block->capacity(); return calculatedCapacity; }
CheckedBoolean CopiedSpace::tryAllocateOversize(size_t bytes, void** outPtr) { ASSERT(isOversize(bytes)); CopiedBlock* block = CopiedBlock::create(*m_heap, WTF::roundUpToMultipleOf<sizeof(double)>(sizeof(CopiedBlock) + bytes)); m_newGen.oversizeBlocks.push(block); m_newGen.blockFilter.add(reinterpret_cast<Bits>(block)); m_blockSet.add(block); ASSERT(!block->isOld()); CopiedAllocator allocator; allocator.setCurrentBlock(block); *outPtr = allocator.forceAllocate(bytes); allocator.resetCurrentBlock(); m_heap->didAllocate(block->capacity()); return true; }
size_t CopiedSpace::capacity() { size_t calculatedCapacity = 0; for (CopiedBlock* block = m_oldGen.toSpace->head(); block; block = block->next()) calculatedCapacity += block->capacity(); for (CopiedBlock* block = m_oldGen.fromSpace->head(); block; block = block->next()) calculatedCapacity += block->capacity(); for (CopiedBlock* block = m_oldGen.oversizeBlocks.head(); block; block = block->next()) calculatedCapacity += block->capacity(); for (CopiedBlock* block = m_newGen.toSpace->head(); block; block = block->next()) calculatedCapacity += block->capacity(); for (CopiedBlock* block = m_newGen.fromSpace->head(); block; block = block->next()) calculatedCapacity += block->capacity(); for (CopiedBlock* block = m_newGen.oversizeBlocks.head(); block; block = block->next()) calculatedCapacity += block->capacity(); return calculatedCapacity; }