diff options
Diffstat (limited to 'Source/JavaScriptCore/heap/CopyVisitor.cpp')
| -rw-r--r-- | Source/JavaScriptCore/heap/CopyVisitor.cpp | 40 |
1 files changed, 28 insertions, 12 deletions
diff --git a/Source/JavaScriptCore/heap/CopyVisitor.cpp b/Source/JavaScriptCore/heap/CopyVisitor.cpp index 2e7dd14dc..3d18936ec 100644 --- a/Source/JavaScriptCore/heap/CopyVisitor.cpp +++ b/Source/JavaScriptCore/heap/CopyVisitor.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2012, 2015 Apple Inc. All rights reserved. + * Copyright (C) 2012 Apple Inc. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -28,24 +28,40 @@ #include "CopiedSpaceInlines.h" #include "CopyVisitorInlines.h" +#include "CopyWorkList.h" +#include "GCThreadSharedData.h" +#include "JSCell.h" +#include "JSObject.h" +#include "Operations.h" +#include <wtf/Threading.h> namespace JSC { -CopyVisitor::CopyVisitor(Heap& heap) - : m_heap(heap) +CopyVisitor::CopyVisitor(GCThreadSharedData& shared) + : m_shared(shared) { - ASSERT(!m_copiedAllocator.isValid()); - CopiedBlock* block = nullptr; - m_heap.m_storageSpace.doneFillingBlock(nullptr, &block); - m_copiedAllocator.setCurrentBlock(block); } -CopyVisitor::~CopyVisitor() +void CopyVisitor::copyFromShared() { - if (m_copiedAllocator.isValid()) - m_heap.m_storageSpace.doneFillingBlock(m_copiedAllocator.resetCurrentBlock(), nullptr); - - WTF::releaseFastMallocFreeMemoryForThisThread(); + size_t next, end; + m_shared.getNextBlocksToCopy(next, end); + while (next < end) { + for (; next < end; ++next) { + CopiedBlock* block = m_shared.m_blocksToCopy[next]; + if (!block->hasWorkList()) + continue; + + CopyWorkList& workList = block->workList(); + for (CopyWorkList::iterator it = workList.begin(); it != workList.end(); ++it) + visitItem(*it); + + ASSERT(!block->liveBytes()); + m_shared.m_copiedSpace->recycleEvacuatedBlock(block, m_shared.m_vm->heap.operationInProgress()); + } + m_shared.getNextBlocksToCopy(next, end); + } + ASSERT(next == end); } } // namespace JSC |
