void Heap::freeBlocks(MarkedBlock* head) { MarkedBlock* next; for (MarkedBlock* block = head; block; block = next) { next = block->next(); m_blocks.remove(block); MarkedBlock::destroy(block); } }
void MarkedSpace::freeBlocks(DoublyLinkedList<MarkedBlock>& blocks) { MarkedBlock* next; for (MarkedBlock* block = blocks.head(); block; block = next) { next = block->next(); blocks.remove(block); m_blocks.remove(block); MarkedBlock::destroy(block); } }
void MarkedSpace::freeBlocks(MarkedBlock* head) { MarkedBlock* next; for (MarkedBlock* block = head; block; block = next) { next = static_cast<MarkedBlock*>(block->next()); m_blocks.remove(block); block->sweep(); MutexLocker locker(m_heap->m_freeBlockLock); m_heap->m_freeBlocks.append(block); m_heap->m_numberOfFreeBlocks++; } }
static bool isListPagedOut(double deadline, DoublyLinkedList<MarkedBlock>& list) { unsigned itersSinceLastTimeCheck = 0; MarkedBlock* block = list.head(); while (block) { block = block->next(); ++itersSinceLastTimeCheck; if (itersSinceLastTimeCheck >= Heap::s_timeCheckResolution) { double currentTime = WTF::monotonicallyIncreasingTime(); if (currentTime > deadline) return true; itersSinceLastTimeCheck = 0; } } return false; }
bool MarkedAllocator::isPagedOut(double deadline) { unsigned itersSinceLastTimeCheck = 0; MarkedBlock* block = m_blockList.head(); while (block) { block = block->next(); ++itersSinceLastTimeCheck; if (itersSinceLastTimeCheck >= Heap::s_timeCheckResolution) { double currentTime = WTF::monotonicallyIncreasingTime(); if (currentTime > deadline) return true; itersSinceLastTimeCheck = 0; } } return false; }