void MarkedSpace::canonicalizeCellLivenessData() { for (size_t cellSize = preciseStep; cellSize <= preciseCutoff; cellSize += preciseStep) { allocatorFor(cellSize).zapFreeList(); destructorAllocatorFor(cellSize).zapFreeList(); } for (size_t cellSize = impreciseStep; cellSize <= impreciseCutoff; cellSize += impreciseStep) { allocatorFor(cellSize).zapFreeList(); destructorAllocatorFor(cellSize).zapFreeList(); } }
void MarkedSpace::resetAllocators() { for (size_t cellSize = preciseStep; cellSize <= preciseCutoff; cellSize += preciseStep) { allocatorFor(cellSize).reset(); destructorAllocatorFor(cellSize).reset(); } for (size_t cellSize = impreciseStep; cellSize <= impreciseCutoff; cellSize += impreciseStep) { allocatorFor(cellSize).reset(); destructorAllocatorFor(cellSize).reset(); } }
MarkedSpace::MarkedSpace(Heap* heap) : m_heap(heap) { for (size_t cellSize = preciseStep; cellSize <= preciseCutoff; cellSize += preciseStep) { allocatorFor(cellSize).init(heap, this, cellSize, false); destructorAllocatorFor(cellSize).init(heap, this, cellSize, true); } for (size_t cellSize = impreciseStep; cellSize <= impreciseCutoff; cellSize += impreciseStep) { allocatorFor(cellSize).init(heap, this, cellSize, false); destructorAllocatorFor(cellSize).init(heap, this, cellSize, true); } }
bool MarkedSpace::isPagedOut(double deadline) { for (size_t cellSize = preciseStep; cellSize <= preciseCutoff; cellSize += preciseStep) { if (allocatorFor(cellSize).isPagedOut(deadline) || destructorAllocatorFor(cellSize).isPagedOut(deadline)) return true; } for (size_t cellSize = impreciseStep; cellSize <= impreciseCutoff; cellSize += impreciseStep) { if (allocatorFor(cellSize).isPagedOut(deadline) || destructorAllocatorFor(cellSize).isPagedOut(deadline)) return true; } return false; }
MarkedSpace::MarkedSpace(Heap* heap) : m_heap(heap) { for (size_t cellSize = preciseStep; cellSize <= preciseCutoff; cellSize += preciseStep) { allocatorFor(cellSize).init(heap, this, cellSize, false, false); destructorAllocatorFor(cellSize).init(heap, this, cellSize, true, false); } for (size_t cellSize = impreciseStep; cellSize <= impreciseCutoff; cellSize += impreciseStep) { allocatorFor(cellSize).init(heap, this, cellSize, false, false); destructorAllocatorFor(cellSize).init(heap, this, cellSize, true, false); } m_structureAllocator.init(heap, this, WTF::roundUpToMultipleOf(32, sizeof(Structure)), true, true); }
void MarkedSpace::canonicalizeCellLivenessData() { for (size_t cellSize = preciseStep; cellSize <= preciseCutoff; cellSize += preciseStep) { allocatorFor(cellSize).canonicalizeCellLivenessData(); normalDestructorAllocatorFor(cellSize).canonicalizeCellLivenessData(); immortalStructureDestructorAllocatorFor(cellSize).canonicalizeCellLivenessData(); } for (size_t cellSize = impreciseStep; cellSize <= impreciseCutoff; cellSize += impreciseStep) { allocatorFor(cellSize).canonicalizeCellLivenessData(); normalDestructorAllocatorFor(cellSize).canonicalizeCellLivenessData(); immortalStructureDestructorAllocatorFor(cellSize).canonicalizeCellLivenessData(); } m_normalSpace.largeAllocator.canonicalizeCellLivenessData(); m_normalDestructorSpace.largeAllocator.canonicalizeCellLivenessData(); m_immortalStructureDestructorSpace.largeAllocator.canonicalizeCellLivenessData(); }
void MarkedSpace::resetAllocators() { for (size_t cellSize = preciseStep; cellSize <= preciseCutoff; cellSize += preciseStep) { allocatorFor(cellSize).reset(); normalDestructorAllocatorFor(cellSize).reset(); immortalStructureDestructorAllocatorFor(cellSize).reset(); } for (size_t cellSize = impreciseStep; cellSize <= impreciseCutoff; cellSize += impreciseStep) { allocatorFor(cellSize).reset(); normalDestructorAllocatorFor(cellSize).reset(); immortalStructureDestructorAllocatorFor(cellSize).reset(); } m_normalSpace.largeAllocator.reset(); m_normalDestructorSpace.largeAllocator.reset(); m_immortalStructureDestructorSpace.largeAllocator.reset(); }
MarkedSpace::MarkedSpace(Heap* heap) : m_heap(heap) { for (size_t cellSize = preciseStep; cellSize <= preciseCutoff; cellSize += preciseStep) { allocatorFor(cellSize).init(heap, this, cellSize, MarkedBlock::None); normalDestructorAllocatorFor(cellSize).init(heap, this, cellSize, MarkedBlock::Normal); immortalStructureDestructorAllocatorFor(cellSize).init(heap, this, cellSize, MarkedBlock::ImmortalStructure); } for (size_t cellSize = impreciseStep; cellSize <= impreciseCutoff; cellSize += impreciseStep) { allocatorFor(cellSize).init(heap, this, cellSize, MarkedBlock::None); normalDestructorAllocatorFor(cellSize).init(heap, this, cellSize, MarkedBlock::Normal); immortalStructureDestructorAllocatorFor(cellSize).init(heap, this, cellSize, MarkedBlock::ImmortalStructure); } m_normalSpace.largeAllocator.init(heap, this, 0, MarkedBlock::None); m_normalDestructorSpace.largeAllocator.init(heap, this, 0, MarkedBlock::Normal); m_immortalStructureDestructorSpace.largeAllocator.init(heap, this, 0, MarkedBlock::ImmortalStructure); }
bool MarkedSpace::isPagedOut(double deadline) { for (size_t cellSize = preciseStep; cellSize <= preciseCutoff; cellSize += preciseStep) { if (allocatorFor(cellSize).isPagedOut(deadline) || normalDestructorAllocatorFor(cellSize).isPagedOut(deadline) || immortalStructureDestructorAllocatorFor(cellSize).isPagedOut(deadline)) return true; } for (size_t cellSize = impreciseStep; cellSize <= impreciseCutoff; cellSize += impreciseStep) { if (allocatorFor(cellSize).isPagedOut(deadline) || normalDestructorAllocatorFor(cellSize).isPagedOut(deadline) || immortalStructureDestructorAllocatorFor(cellSize).isPagedOut(deadline)) return true; } if (m_normalSpace.largeAllocator.isPagedOut(deadline) || m_normalDestructorSpace.largeAllocator.isPagedOut(deadline) || m_immortalStructureDestructorSpace.largeAllocator.isPagedOut(deadline)) return true; return false; }
void MarkedSpace::freeBlock(MarkedBlock* block) { allocatorFor(block).removeBlock(block); m_blocks.remove(block); m_heap->blockAllocator().deallocate(MarkedBlock::destroy(block)); }