diff options
author | Lorry Tar Creator <lorry-tar-importer@lorry> | 2015-05-20 09:56:07 +0000 |
---|---|---|
committer | Lorry Tar Creator <lorry-tar-importer@lorry> | 2015-05-20 09:56:07 +0000 |
commit | 41386e9cb918eed93b3f13648cbef387e371e451 (patch) | |
tree | a97f9d7bd1d9d091833286085f72da9d83fd0606 /Source/JavaScriptCore/heap/CopiedSpace.cpp | |
parent | e15dd966d523731101f70ccf768bba12435a0208 (diff) | |
download | WebKitGtk-tarball-41386e9cb918eed93b3f13648cbef387e371e451.tar.gz |
webkitgtk-2.4.9webkitgtk-2.4.9
Diffstat (limited to 'Source/JavaScriptCore/heap/CopiedSpace.cpp')
-rw-r--r-- | Source/JavaScriptCore/heap/CopiedSpace.cpp | 39 |
1 files changed, 17 insertions, 22 deletions
diff --git a/Source/JavaScriptCore/heap/CopiedSpace.cpp b/Source/JavaScriptCore/heap/CopiedSpace.cpp index a3874994f..eb294214f 100644 --- a/Source/JavaScriptCore/heap/CopiedSpace.cpp +++ b/Source/JavaScriptCore/heap/CopiedSpace.cpp @@ -28,7 +28,7 @@ #include "CopiedSpaceInlines.h" #include "GCActivityCallback.h" -#include "JSCInlines.h" +#include "Operations.h" #include "Options.h" namespace JSC { @@ -38,29 +38,29 @@ CopiedSpace::CopiedSpace(Heap* heap) , m_inCopyingPhase(false) , m_shouldDoCopyPhase(false) , m_numberOfLoanedBlocks(0) - , m_bytesRemovedFromOldSpaceDueToReallocation(0) { + m_toSpaceLock.Init(); } CopiedSpace::~CopiedSpace() { while (!m_oldGen.toSpace->isEmpty()) - CopiedBlock::destroy(m_oldGen.toSpace->removeHead()); + m_heap->blockAllocator().deallocate(CopiedBlock::destroy(m_oldGen.toSpace->removeHead())); while (!m_oldGen.fromSpace->isEmpty()) - CopiedBlock::destroy(m_oldGen.fromSpace->removeHead()); + m_heap->blockAllocator().deallocate(CopiedBlock::destroy(m_oldGen.fromSpace->removeHead())); while (!m_oldGen.oversizeBlocks.isEmpty()) - CopiedBlock::destroy(m_oldGen.oversizeBlocks.removeHead()); + m_heap->blockAllocator().deallocateCustomSize(CopiedBlock::destroy(m_oldGen.oversizeBlocks.removeHead())); while (!m_newGen.toSpace->isEmpty()) - CopiedBlock::destroy(m_newGen.toSpace->removeHead()); + m_heap->blockAllocator().deallocate(CopiedBlock::destroy(m_newGen.toSpace->removeHead())); while (!m_newGen.fromSpace->isEmpty()) - CopiedBlock::destroy(m_newGen.fromSpace->removeHead()); + m_heap->blockAllocator().deallocate(CopiedBlock::destroy(m_newGen.fromSpace->removeHead())); while (!m_newGen.oversizeBlocks.isEmpty()) - CopiedBlock::destroy(m_newGen.oversizeBlocks.removeHead()); + m_heap->blockAllocator().deallocateCustomSize(CopiedBlock::destroy(m_newGen.oversizeBlocks.removeHead())); ASSERT(m_oldGen.toSpace->isEmpty()); ASSERT(m_oldGen.fromSpace->isEmpty()); @@ -99,7 +99,7 @@ CheckedBoolean CopiedSpace::tryAllocateOversize(size_t bytes, void** outPtr) { ASSERT(isOversize(bytes)); - CopiedBlock* block = CopiedBlock::create(WTF::roundUpToMultipleOf<sizeof(double)>(sizeof(CopiedBlock) + bytes)); + CopiedBlock* block = CopiedBlock::create(m_heap->blockAllocator().allocateCustomSize(sizeof(CopiedBlock) + bytes, CopiedBlock::blockSize)); m_newGen.oversizeBlocks.push(block); m_newGen.blockFilter.add(reinterpret_cast<Bits>(block)); m_blockSet.add(block); @@ -110,7 +110,7 @@ CheckedBoolean CopiedSpace::tryAllocateOversize(size_t bytes, void** outPtr) *outPtr = allocator.forceAllocate(bytes); allocator.resetCurrentBlock(); - m_heap->didAllocate(block->capacity()); + m_heap->didAllocate(block->region()->blockSize()); return true; } @@ -156,16 +156,12 @@ CheckedBoolean CopiedSpace::tryReallocateOversize(void** ptr, size_t oldSize, si CopiedBlock* oldBlock = CopiedSpace::blockFor(oldPtr); if (oldBlock->isOversize()) { - // FIXME: Eagerly deallocating the old space block probably buys more confusion than - // value. - // https://bugs.webkit.org/show_bug.cgi?id=144750 - if (oldBlock->isOld()) { - m_bytesRemovedFromOldSpaceDueToReallocation += oldBlock->size(); + if (oldBlock->isOld()) m_oldGen.oversizeBlocks.remove(oldBlock); - } else + else m_newGen.oversizeBlocks.remove(oldBlock); m_blockSet.remove(oldBlock); - CopiedBlock::destroy(oldBlock); + m_heap->blockAllocator().deallocateCustomSize(CopiedBlock::destroy(oldBlock)); } *ptr = newPtr; @@ -191,19 +187,19 @@ void CopiedSpace::doneFillingBlock(CopiedBlock* block, CopiedBlock** exchange) { // Always put the block into the old gen because it's being promoted! - LockHolder locker(&m_toSpaceLock); + SpinLockHolder locker(&m_toSpaceLock); m_oldGen.toSpace->push(block); m_blockSet.add(block); m_oldGen.blockFilter.add(reinterpret_cast<Bits>(block)); } { - LockHolder locker(m_loanedBlocksLock); + MutexLocker locker(m_loanedBlocksLock); ASSERT(m_numberOfLoanedBlocks > 0); ASSERT(m_inCopyingPhase); m_numberOfLoanedBlocks--; if (!m_numberOfLoanedBlocks) - m_loanedBlocksCondition.notifyOne(); + m_loanedBlocksCondition.signal(); } } @@ -231,7 +227,7 @@ void CopiedSpace::didStartFullCollection() void CopiedSpace::doneCopying() { { - LockHolder locker(m_loanedBlocksLock); + MutexLocker locker(m_loanedBlocksLock); while (m_numberOfLoanedBlocks > 0) m_loanedBlocksCondition.wait(m_loanedBlocksLock); } @@ -257,7 +253,6 @@ void CopiedSpace::doneCopying() // We don't add the block to the blockSet because it was never removed. ASSERT(m_blockSet.contains(block)); blockFilter->add(reinterpret_cast<Bits>(block)); - block->didSurviveGC(); toSpace->push(block); } |