Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(21)

Unified Diff: Source/platform/heap/Heap.cpp

Issue 906213002: Oilpan: Rename heap classes (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 5 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « Source/platform/heap/Heap.h ('k') | Source/platform/heap/HeapTest.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/platform/heap/Heap.cpp
diff --git a/Source/platform/heap/Heap.cpp b/Source/platform/heap/Heap.cpp
index dd97c7ff7d0497f051c8540f11a8ee873114f30d..53f4dffc13b44e4538d379ceed8c08ac38d873cf 100644
--- a/Source/platform/heap/Heap.cpp
+++ b/Source/platform/heap/Heap.cpp
@@ -189,7 +189,7 @@ public:
return allocate(blinkPageSize * blinkPagesPerRegion, blinkPagesPerRegion);
}
- BaseHeapPage* pageFromAddress(Address address)
+ BasePage* pageFromAddress(Address address)
{
ASSERT(contains(address));
if (!m_inUse[index(address)])
@@ -477,13 +477,13 @@ void HeapObjectHeader::finalize(Address object, size_t objectSize)
// thread commences execution.
}
-void LargeObject::sweep()
+void LargeObjectPage::sweep()
{
Heap::increaseMarkedObjectSize(size());
heapObjectHeader()->unmark();
}
-bool LargeObject::isEmpty()
+bool LargeObjectPage::isEmpty()
{
return !heapObjectHeader()->isMarked();
}
@@ -512,7 +512,7 @@ static void markPointer(Visitor* visitor, HeapObjectHeader* header)
}
}
-void LargeObject::checkAndMarkPointer(Visitor* visitor, Address address)
+void LargeObjectPage::checkAndMarkPointer(Visitor* visitor, Address address)
{
ASSERT(contains(address));
if (!containedInObjectPayload(address) || heapObjectHeader()->isDead())
@@ -523,7 +523,7 @@ void LargeObject::checkAndMarkPointer(Visitor* visitor, Address address)
markPointer(visitor, heapObjectHeader());
}
-void LargeObject::markUnmarkedObjectsDead()
+void LargeObjectPage::markUnmarkedObjectsDead()
{
HeapObjectHeader* header = heapObjectHeader();
if (header->isMarked())
@@ -532,9 +532,9 @@ void LargeObject::markUnmarkedObjectsDead()
header->markDead();
}
-void LargeObject::removeFromHeap()
+void LargeObjectPage::removeFromHeap()
{
- static_cast<ThreadHeapForLargeObject*>(heap())->freeLargeObject(this);
+ static_cast<LargeObjectHeap*>(heap())->freeLargeObjectPage(this);
}
FreeList::FreeList()
@@ -542,7 +542,7 @@ FreeList::FreeList()
{
}
-ThreadHeap::ThreadHeap(ThreadState* state, int index)
+BaseHeap::BaseHeap(ThreadState* state, int index)
: m_firstPage(nullptr)
, m_firstUnsweptPage(nullptr)
, m_threadState(state)
@@ -555,8 +555,8 @@ ThreadHeap::ThreadHeap(ThreadState* state, int index)
{
}
-ThreadHeapForHeapPage::ThreadHeapForHeapPage(ThreadState* state, int index)
- : ThreadHeap(state, index)
+NormalPageHeap::NormalPageHeap(ThreadState* state, int index)
+ : BaseHeap(state, index)
, m_currentAllocationPoint(nullptr)
, m_remainingAllocationSize(0)
, m_lastRemainingAllocationSize(0)
@@ -565,31 +565,31 @@ ThreadHeapForHeapPage::ThreadHeapForHeapPage(ThreadState* state, int index)
clearFreeLists();
}
-ThreadHeapForLargeObject::ThreadHeapForLargeObject(ThreadState* state, int index)
- : ThreadHeap(state, index)
+LargeObjectHeap::LargeObjectHeap(ThreadState* state, int index)
+ : BaseHeap(state, index)
{
}
-ThreadHeap::~ThreadHeap()
+BaseHeap::~BaseHeap()
{
ASSERT(!m_firstPage);
ASSERT(!m_firstUnsweptPage);
}
-void ThreadHeap::cleanupPages()
+void BaseHeap::cleanupPages()
{
clearFreeLists();
ASSERT(!m_firstUnsweptPage);
- // Add the ThreadHeap's pages to the orphanedPagePool.
- for (BaseHeapPage* page = m_firstPage; page; page = page->next()) {
+ // Add the BaseHeap's pages to the orphanedPagePool.
+ for (BasePage* page = m_firstPage; page; page = page->next()) {
Heap::decreaseAllocatedSpace(page->size());
Heap::orphanedPagePool()->addOrphanedPage(heapIndex(), page);
}
m_firstPage = nullptr;
}
-void ThreadHeapForHeapPage::updateRemainingAllocationSize()
+void NormalPageHeap::updateRemainingAllocationSize()
{
if (m_lastRemainingAllocationSize > remainingAllocationSize()) {
Heap::increaseAllocatedObjectSize(m_lastRemainingAllocationSize - remainingAllocationSize());
@@ -598,14 +598,14 @@ void ThreadHeapForHeapPage::updateRemainingAllocationSize()
ASSERT(m_lastRemainingAllocationSize == remainingAllocationSize());
}
-void ThreadHeapForHeapPage::setAllocationPoint(Address point, size_t size)
+void NormalPageHeap::setAllocationPoint(Address point, size_t size)
{
#if ENABLE(ASSERT)
if (point) {
ASSERT(size);
- BaseHeapPage* page = pageFromObject(point);
- ASSERT(!page->isLargeObject());
- ASSERT(size <= static_cast<HeapPage*>(page)->payloadSize());
+ BasePage* page = pageFromObject(point);
+ ASSERT(!page->isLargeObjectPage());
+ ASSERT(size <= static_cast<NormalPage*>(page)->payloadSize());
}
#endif
if (hasCurrentAllocationArea()) {
@@ -616,7 +616,7 @@ void ThreadHeapForHeapPage::setAllocationPoint(Address point, size_t size)
m_lastRemainingAllocationSize = m_remainingAllocationSize = size;
}
-Address ThreadHeapForHeapPage::outOfLineAllocate(size_t allocationSize, size_t gcInfoIndex)
+Address NormalPageHeap::outOfLineAllocate(size_t allocationSize, size_t gcInfoIndex)
{
ASSERT(allocationSize > remainingAllocationSize());
ASSERT(allocationSize >= allocationGranularity);
@@ -627,7 +627,7 @@ Address ThreadHeapForHeapPage::outOfLineAllocate(size_t allocationSize, size_t g
// 1. If this allocation is big enough, allocate a large object.
if (allocationSize >= largeObjectSizeThreshold)
- return static_cast<ThreadHeapForLargeObject*>(threadState()->heap(LargeObjectHeap))->allocateLargeObject(allocationSize, gcInfoIndex);
+ return static_cast<LargeObjectHeap*>(threadState()->heap(LargeObjectHeapIndex))->allocateLargeObjectPage(allocationSize, gcInfoIndex);
// 2. Check if we should trigger a GC.
updateRemainingAllocationSize();
@@ -667,7 +667,7 @@ Address ThreadHeapForHeapPage::outOfLineAllocate(size_t allocationSize, size_t g
return result;
}
-Address ThreadHeapForHeapPage::allocateFromFreeList(size_t allocationSize, size_t gcInfoIndex)
+Address NormalPageHeap::allocateFromFreeList(size_t allocationSize, size_t gcInfoIndex)
{
// Try reusing a block from the largest bin. The underlying reasoning
// being that we want to amortize this slow allocation call by carving
@@ -698,7 +698,7 @@ Address ThreadHeapForHeapPage::allocateFromFreeList(size_t allocationSize, size_
return nullptr;
}
-void ThreadHeap::prepareForSweep()
+void BaseHeap::prepareForSweep()
{
ASSERT(!threadState()->isInGC());
ASSERT(!m_firstUnsweptPage);
@@ -708,7 +708,7 @@ void ThreadHeap::prepareForSweep()
m_firstPage = nullptr;
}
-Address ThreadHeap::lazySweep(size_t allocationSize, size_t gcInfoIndex)
+Address BaseHeap::lazySweep(size_t allocationSize, size_t gcInfoIndex)
{
// If there are no pages to be swept, return immediately.
if (!m_firstUnsweptPage)
@@ -723,7 +723,7 @@ Address ThreadHeap::lazySweep(size_t allocationSize, size_t gcInfoIndex)
if (threadState()->sweepForbidden())
return nullptr;
- TRACE_EVENT0("blink_gc", "ThreadHeap::lazySweepPages");
+ TRACE_EVENT0("blink_gc", "BaseHeap::lazySweepPages");
ThreadState::SweepForbiddenScope scope(threadState());
if (threadState()->isMainThread())
@@ -736,12 +736,12 @@ Address ThreadHeap::lazySweep(size_t allocationSize, size_t gcInfoIndex)
return result;
}
-Address ThreadHeapForHeapPage::lazySweepPages(size_t allocationSize, size_t gcInfoIndex)
+Address NormalPageHeap::lazySweepPages(size_t allocationSize, size_t gcInfoIndex)
{
ASSERT(!hasCurrentAllocationArea());
Address result = nullptr;
while (m_firstUnsweptPage) {
- BaseHeapPage* page = m_firstUnsweptPage;
+ BasePage* page = m_firstUnsweptPage;
if (page->isEmpty()) {
page->unlink(&m_firstUnsweptPage);
page->removeFromHeap();
@@ -753,7 +753,7 @@ Address ThreadHeapForHeapPage::lazySweepPages(size_t allocationSize, size_t gcIn
page->link(&m_firstPage);
page->markAsSwept();
- // For HeapPage, stop lazy sweeping once we find a slot to
+ // For NormalPage, stop lazy sweeping once we find a slot to
// allocate a new object.
result = allocateFromFreeList(allocationSize, gcInfoIndex);
if (result)
@@ -763,20 +763,20 @@ Address ThreadHeapForHeapPage::lazySweepPages(size_t allocationSize, size_t gcIn
return result;
}
-Address ThreadHeapForLargeObject::lazySweepPages(size_t allocationSize, size_t gcInfoIndex)
+Address LargeObjectHeap::lazySweepPages(size_t allocationSize, size_t gcInfoIndex)
{
Address result = nullptr;
size_t sweptSize = 0;
while (m_firstUnsweptPage) {
- BaseHeapPage* page = m_firstUnsweptPage;
+ BasePage* page = m_firstUnsweptPage;
if (page->isEmpty()) {
- sweptSize += static_cast<LargeObject*>(page)->payloadSize() + sizeof(HeapObjectHeader);
+ sweptSize += static_cast<LargeObjectPage*>(page)->payloadSize() + sizeof(HeapObjectHeader);
page->unlink(&m_firstUnsweptPage);
page->removeFromHeap();
- // For LargeObject, stop lazy sweeping once we have swept
+ // For LargeObjectPage, stop lazy sweeping once we have swept
// more than allocationSize bytes.
if (sweptSize >= allocationSize) {
- result = doAllocateLargeObject(allocationSize, gcInfoIndex);
+ result = doAllocateLargeObjectPage(allocationSize, gcInfoIndex);
ASSERT(result);
break;
}
@@ -792,7 +792,7 @@ Address ThreadHeapForLargeObject::lazySweepPages(size_t allocationSize, size_t g
return result;
}
-void ThreadHeap::completeSweep()
+void BaseHeap::completeSweep()
{
RELEASE_ASSERT(threadState()->isSweepingInProgress());
ASSERT(threadState()->sweepForbidden());
@@ -801,7 +801,7 @@ void ThreadHeap::completeSweep()
ScriptForbiddenScope::enter();
while (m_firstUnsweptPage) {
- BaseHeapPage* page = m_firstUnsweptPage;
+ BasePage* page = m_firstUnsweptPage;
if (page->isEmpty()) {
page->unlink(&m_firstUnsweptPage);
page->removeFromHeap();
@@ -820,13 +820,13 @@ void ThreadHeap::completeSweep()
}
#if ENABLE(ASSERT)
-BaseHeapPage* ThreadHeap::findPageFromAddress(Address address)
+BasePage* BaseHeap::findPageFromAddress(Address address)
{
- for (BaseHeapPage* page = m_firstPage; page; page = page->next()) {
+ for (BasePage* page = m_firstPage; page; page = page->next()) {
if (page->contains(address))
return page;
}
- for (BaseHeapPage* page = m_firstUnsweptPage; page; page = page->next()) {
+ for (BasePage* page = m_firstUnsweptPage; page; page = page->next()) {
if (page->contains(address))
return page;
}
@@ -836,13 +836,13 @@ BaseHeapPage* ThreadHeap::findPageFromAddress(Address address)
#if ENABLE(GC_PROFILING)
#define GC_PROFILE_HEAP_PAGE_SNAPSHOT_THRESHOLD 0
-void ThreadHeap::snapshot(TracedValue* json, ThreadState::SnapshotInfo* info)
+void BaseHeap::snapshot(TracedValue* json, ThreadState::SnapshotInfo* info)
{
ASSERT(isConsistentForSweeping());
size_t previousPageCount = info->pageCount;
json->beginArray("pages");
- for (BaseHeapPage* page = m_firstPage; page; page = page->next(), ++info->pageCount) {
+ for (BasePage* page = m_firstPage; page; page = page->next(), ++info->pageCount) {
// FIXME: To limit the size of the snapshot we only output "threshold" many page snapshots.
if (info->pageCount < GC_PROFILE_HEAP_PAGE_SNAPSHOT_THRESHOLD) {
json->beginArray();
@@ -858,11 +858,11 @@ void ThreadHeap::snapshot(TracedValue* json, ThreadState::SnapshotInfo* info)
json->setInteger("pageCount", info->pageCount - previousPageCount);
}
-void ThreadHeap::incrementMarkedObjectsAge()
+void BaseHeap::incrementMarkedObjectsAge()
{
- for (HeapPage* page = m_firstPage; page; page = page->next())
+ for (NormalPage* page = m_firstPage; page; page = page->next())
page->incrementMarkedObjectsAge();
- for (LargeObject* largeObject = m_firstLargeObject; largeObject; largeObject = largeObject->next())
+ for (LargeObjectPage* largeObject = m_firstLargeObjectPage; largeObject; largeObject = largeObject->next())
largeObject->incrementMarkedObjectsAge();
}
#endif
@@ -886,13 +886,13 @@ void FreeList::addToFreeList(Address address, size_t size)
}
entry = new (NotNull, address) FreeListEntry(size);
#if defined(ADDRESS_SANITIZER)
- BaseHeapPage* page = pageFromObject(address);
- ASSERT(!page->isLargeObject());
+ BasePage* page = pageFromObject(address);
+ ASSERT(!page->isLargeObjectPage());
// For ASan we don't add the entry to the free lists until the
// asanDeferMemoryReuseCount reaches zero. However we always add entire
// pages to ensure that adding a new page will increase the allocation
// space.
- if (static_cast<HeapPage*>(page)->payloadSize() != size && !entry->shouldAddToFreeList())
+ if (static_cast<NormalPage*>(page)->payloadSize() != size && !entry->shouldAddToFreeList())
return;
#endif
int index = bucketIndexForSize(size);
@@ -901,7 +901,7 @@ void FreeList::addToFreeList(Address address, size_t size)
m_biggestFreeListIndex = index;
}
-bool ThreadHeapForHeapPage::expandObject(HeapObjectHeader* header, size_t newSize)
+bool NormalPageHeap::expandObject(HeapObjectHeader* header, size_t newSize)
{
// It's possible that Vector requests a smaller expanded size because
// Vector::shrinkCapacity can set a capacity smaller than the actual payload
@@ -925,7 +925,7 @@ bool ThreadHeapForHeapPage::expandObject(HeapObjectHeader* header, size_t newSiz
return false;
}
-void ThreadHeapForHeapPage::shrinkObject(HeapObjectHeader* header, size_t newSize)
+void NormalPageHeap::shrinkObject(HeapObjectHeader* header, size_t newSize)
{
ASSERT(header->payloadSize() > newSize);
size_t allocationSize = allocationSizeFromSize(newSize);
@@ -948,7 +948,7 @@ void ThreadHeapForHeapPage::shrinkObject(HeapObjectHeader* header, size_t newSiz
}
}
-void ThreadHeapForHeapPage::promptlyFreeObject(HeapObjectHeader* header)
+void NormalPageHeap::promptlyFreeObject(HeapObjectHeader* header)
{
ASSERT(!threadState()->sweepForbidden());
header->checkHeader();
@@ -980,7 +980,7 @@ void ThreadHeapForHeapPage::promptlyFreeObject(HeapObjectHeader* header)
m_promptlyFreedSize += size;
}
-bool ThreadHeapForHeapPage::coalesce()
+bool NormalPageHeap::coalesce()
{
// Don't coalesce heaps if there are not enough promptly freed entries
// to be coalesced.
@@ -995,12 +995,12 @@ bool ThreadHeapForHeapPage::coalesce()
return false;
ASSERT(!hasCurrentAllocationArea());
- TRACE_EVENT0("blink_gc", "ThreadHeap::coalesce");
+ TRACE_EVENT0("blink_gc", "BaseHeap::coalesce");
// Rebuild free lists.
m_freeList.clear();
size_t freedSize = 0;
- for (HeapPage* page = static_cast<HeapPage*>(m_firstPage); page; page = static_cast<HeapPage*>(page->next())) {
+ for (NormalPage* page = static_cast<NormalPage*>(m_firstPage); page; page = static_cast<NormalPage*>(page->next())) {
page->clearObjectStartBitMap();
Address startOfGap = page->payload();
for (Address headerAddress = startOfGap; headerAddress < page->payloadEnd(); ) {
@@ -1041,7 +1041,7 @@ bool ThreadHeapForHeapPage::coalesce()
return true;
}
-Address ThreadHeapForLargeObject::allocateLargeObject(size_t allocationSize, size_t gcInfoIndex)
+Address LargeObjectHeap::allocateLargeObjectPage(size_t allocationSize, size_t gcInfoIndex)
{
// Caller already added space for object header and rounded up to allocation
// alignment
@@ -1059,12 +1059,12 @@ Address ThreadHeapForLargeObject::allocateLargeObject(size_t allocationSize, siz
// 3. If we have failed in sweeping allocationSize bytes,
// we complete sweeping before allocating this large object.
threadState()->completeSweep();
- return doAllocateLargeObject(allocationSize, gcInfoIndex);
+ return doAllocateLargeObjectPage(allocationSize, gcInfoIndex);
}
-Address ThreadHeapForLargeObject::doAllocateLargeObject(size_t allocationSize, size_t gcInfoIndex)
+Address LargeObjectHeap::doAllocateLargeObjectPage(size_t allocationSize, size_t gcInfoIndex)
{
- size_t largeObjectSize = sizeof(LargeObject) + LargeObject::headerPadding() + allocationSize;
+ size_t largeObjectSize = sizeof(LargeObjectPage) + LargeObjectPage::headerPadding() + allocationSize;
// If ASan is supported we add allocationGranularity bytes to the allocated
// space and poison that to detect overflows
#if defined(ADDRESS_SANITIZER)
@@ -1075,7 +1075,7 @@ Address ThreadHeapForLargeObject::doAllocateLargeObject(size_t allocationSize, s
PageMemory* pageMemory = PageMemory::allocate(largeObjectSize);
threadState()->allocatedRegionsSinceLastGC().append(pageMemory->region());
Address largeObjectAddress = pageMemory->writableStart();
- Address headerAddress = largeObjectAddress + sizeof(LargeObject) + LargeObject::headerPadding();
+ Address headerAddress = largeObjectAddress + sizeof(LargeObjectPage) + LargeObjectPage::headerPadding();
#if ENABLE(ASSERT)
// Verify that the allocated PageMemory is expectedly zeroed.
for (size_t i = 0; i < largeObjectSize; ++i)
@@ -1085,7 +1085,7 @@ Address ThreadHeapForLargeObject::doAllocateLargeObject(size_t allocationSize, s
HeapObjectHeader* header = new (NotNull, headerAddress) HeapObjectHeader(largeObjectSizeInHeader, gcInfoIndex);
Address result = headerAddress + sizeof(*header);
ASSERT(!(reinterpret_cast<uintptr_t>(result) & allocationMask));
- LargeObject* largeObject = new (largeObjectAddress) LargeObject(pageMemory, this, allocationSize);
+ LargeObjectPage* largeObject = new (largeObjectAddress) LargeObjectPage(pageMemory, this, allocationSize);
header->checkHeader();
// Poison the object header and allocationGranularity bytes after the object
@@ -1099,7 +1099,7 @@ Address ThreadHeapForLargeObject::doAllocateLargeObject(size_t allocationSize, s
return result;
}
-void ThreadHeapForLargeObject::freeLargeObject(LargeObject* object)
+void LargeObjectHeap::freeLargeObjectPage(LargeObjectPage* object)
{
object->heapObjectHeader()->finalize(object->payload(), object->payloadSize());
Heap::decreaseAllocatedSpace(object->size());
@@ -1123,7 +1123,7 @@ void ThreadHeapForLargeObject::freeLargeObject(LargeObject* object)
} else {
ASSERT(!ThreadState::current()->isTerminating());
PageMemory* memory = object->storage();
- object->~LargeObject();
+ object->~LargeObjectPage();
delete memory;
}
}
@@ -1177,7 +1177,7 @@ PageMemory* FreePagePool::takeFreePage(int index)
return nullptr;
}
-BaseHeapPage::BaseHeapPage(PageMemory* storage, ThreadHeap* heap)
+BasePage::BasePage(PageMemory* storage, BaseHeap* heap)
: m_storage(storage)
, m_heap(heap)
, m_next(nullptr)
@@ -1187,7 +1187,7 @@ BaseHeapPage::BaseHeapPage(PageMemory* storage, ThreadHeap* heap)
ASSERT(isPageHeaderAddress(reinterpret_cast<Address>(this)));
}
-void BaseHeapPage::markOrphaned()
+void BasePage::markOrphaned()
{
m_heap = nullptr;
m_terminating = false;
@@ -1201,17 +1201,17 @@ OrphanedPagePool::~OrphanedPagePool()
for (int index = 0; index < NumberOfHeaps; ++index) {
while (PoolEntry* entry = m_pool[index]) {
m_pool[index] = entry->next;
- BaseHeapPage* page = entry->data;
+ BasePage* page = entry->data;
delete entry;
PageMemory* memory = page->storage();
ASSERT(memory);
- page->~BaseHeapPage();
+ page->~BasePage();
delete memory;
}
}
}
-void OrphanedPagePool::addOrphanedPage(int index, BaseHeapPage* page)
+void OrphanedPagePool::addOrphanedPage(int index, BasePage* page)
{
page->markOrphaned();
PoolEntry* entry = new PoolEntry(page, m_pool[index]);
@@ -1233,18 +1233,18 @@ void OrphanedPagePool::decommitOrphanedPages()
PoolEntry* entry = m_pool[index];
PoolEntry** prevNext = &m_pool[index];
while (entry) {
- BaseHeapPage* page = entry->data;
+ BasePage* page = entry->data;
// Check if we should reuse the memory or just free it.
// Large object memory is not reused but freed, normal blink heap
// pages are reused.
// NOTE: We call the destructor before freeing or adding to the
// free page pool.
PageMemory* memory = page->storage();
- if (page->isLargeObject()) {
- page->~BaseHeapPage();
+ if (page->isLargeObjectPage()) {
+ page->~BasePage();
delete memory;
} else {
- page->~BaseHeapPage();
+ page->~BasePage();
clearMemory(memory);
Heap::freePagePool()->addFreePage(index, memory);
}
@@ -1277,7 +1277,7 @@ bool OrphanedPagePool::contains(void* object)
{
for (int index = 0; index < NumberOfHeaps; ++index) {
for (PoolEntry* entry = m_pool[index]; entry; entry = entry->next) {
- BaseHeapPage* page = entry->data;
+ BasePage* page = entry->data;
if (page->contains(reinterpret_cast<Address>(object)))
return true;
}
@@ -1286,7 +1286,7 @@ bool OrphanedPagePool::contains(void* object)
}
#endif
-void ThreadHeapForHeapPage::freePage(HeapPage* page)
+void NormalPageHeap::freePage(NormalPage* page)
{
Heap::decreaseAllocatedSpace(page->size());
@@ -1302,12 +1302,12 @@ void ThreadHeapForHeapPage::freePage(HeapPage* page)
Heap::orphanedPagePool()->addOrphanedPage(heapIndex(), page);
} else {
PageMemory* memory = page->storage();
- page->~HeapPage();
+ page->~NormalPage();
Heap::freePagePool()->addFreePage(heapIndex(), memory);
}
}
-void ThreadHeapForHeapPage::allocatePage()
+void NormalPageHeap::allocatePage()
{
threadState()->shouldFlushHeapDoesNotContainCache();
PageMemory* pageMemory = Heap::freePagePool()->takeFreePage(heapIndex());
@@ -1338,7 +1338,7 @@ void ThreadHeapForHeapPage::allocatePage()
offset += blinkPageSize;
}
}
- HeapPage* page = new (pageMemory->writableStart()) HeapPage(pageMemory, this);
+ NormalPage* page = new (pageMemory->writableStart()) NormalPage(pageMemory, this);
page->link(&m_firstPage);
Heap::increaseAllocatedSpace(page->size());
@@ -1346,9 +1346,9 @@ void ThreadHeapForHeapPage::allocatePage()
}
#if ENABLE(ASSERT)
-bool ThreadHeapForHeapPage::pagesToBeSweptContains(Address address)
+bool NormalPageHeap::pagesToBeSweptContains(Address address)
{
- for (BaseHeapPage* page = m_firstUnsweptPage; page; page = page->next()) {
+ for (BasePage* page = m_firstUnsweptPage; page; page = page->next()) {
if (page->contains(address))
return true;
}
@@ -1356,19 +1356,19 @@ bool ThreadHeapForHeapPage::pagesToBeSweptContains(Address address)
}
#endif
-size_t ThreadHeap::objectPayloadSizeForTesting()
+size_t BaseHeap::objectPayloadSizeForTesting()
{
ASSERT(isConsistentForSweeping());
ASSERT(!m_firstUnsweptPage);
size_t objectPayloadSize = 0;
- for (BaseHeapPage* page = m_firstPage; page; page = page->next())
+ for (BasePage* page = m_firstPage; page; page = page->next())
objectPayloadSize += page->objectPayloadSizeForTesting();
return objectPayloadSize;
}
#if ENABLE(ASSERT)
-bool ThreadHeapForHeapPage::isConsistentForSweeping()
+bool NormalPageHeap::isConsistentForSweeping()
{
// A thread heap is consistent for sweeping if none of the pages to be swept
// contain a freelist block or the current allocation point.
@@ -1386,11 +1386,11 @@ bool ThreadHeapForHeapPage::isConsistentForSweeping()
}
#endif
-void ThreadHeap::makeConsistentForSweeping()
+void BaseHeap::makeConsistentForSweeping()
{
clearFreeLists();
ASSERT(isConsistentForSweeping());
- for (BaseHeapPage* page = m_firstPage; page; page = page->next())
+ for (BasePage* page = m_firstPage; page; page = page->next())
page->markAsUnswept();
// If a new GC is requested before this thread got around to sweep,
@@ -1400,8 +1400,8 @@ void ThreadHeap::makeConsistentForSweeping()
// objects. If we trace a dead object we could end up tracing into
// garbage or the middle of another object via the newly conservatively
// found object.
- BaseHeapPage* previousPage = nullptr;
- for (BaseHeapPage* page = m_firstUnsweptPage; page; previousPage = page, page = page->next()) {
+ BasePage* previousPage = nullptr;
+ for (BasePage* page = m_firstUnsweptPage; page; previousPage = page, page = page->next()) {
page->markUnmarkedObjectsDead();
ASSERT(!page->hasBeenSwept());
}
@@ -1414,14 +1414,14 @@ void ThreadHeap::makeConsistentForSweeping()
ASSERT(!m_firstUnsweptPage);
}
-void ThreadHeapForHeapPage::clearFreeLists()
+void NormalPageHeap::clearFreeLists()
{
setAllocationPoint(nullptr, 0);
m_freeList.clear();
}
#if ENABLE(GC_PROFILING)
-void ThreadHeap::snapshotFreeList(TracedValue& json)
+void BaseHeap::snapshotFreeList(TracedValue& json)
{
json.setInteger("cumulativeAllocationSize", m_cumulativeAllocationSize);
json.setDouble("inlineAllocationRate", static_cast<double>(m_inlineAllocationCount) / m_allocationCount);
@@ -1429,7 +1429,7 @@ void ThreadHeap::snapshotFreeList(TracedValue& json)
json.setInteger("allocationCount", m_allocationCount);
size_t pageCount = 0;
size_t totalPageSize = 0;
- for (HeapPage* page = m_firstPage; page; page = page->next()) {
+ for (NormalPage* page = m_firstPage; page; page = page->next()) {
++pageCount;
totalPageSize += page->payloadSize();
}
@@ -1452,19 +1452,19 @@ void ThreadHeap::snapshotFreeList(TracedValue& json)
json.endArray();
}
-void ThreadHeap::countMarkedObjects(ClassAgeCountsMap& classAgeCounts) const
+void BaseHeap::countMarkedObjects(ClassAgeCountsMap& classAgeCounts) const
{
- for (HeapPage* page = m_firstPage; page; page = page->next())
+ for (NormalPage* page = m_firstPage; page; page = page->next())
page->countMarkedObjects(classAgeCounts);
- for (LargeObject* largeObject = m_firstLargeObject; largeObject; largeObject = largeObject->next())
+ for (LargeObjectPage* largeObject = m_firstLargeObjectPage; largeObject; largeObject = largeObject->next())
largeObject->countMarkedObjects(classAgeCounts);
}
-void ThreadHeap::countObjectsToSweep(ClassAgeCountsMap& classAgeCounts) const
+void BaseHeap::countObjectsToSweep(ClassAgeCountsMap& classAgeCounts) const
{
- for (HeapPage* page = m_firstPage; page; page = page->next())
+ for (NormalPage* page = m_firstPage; page; page = page->next())
page->countObjectsToSweep(classAgeCounts);
- for (LargeObject* largeObject = m_firstLargeObject; largeObject; largeObject = largeObject->next())
+ for (LargeObjectPage* largeObject = m_firstLargeObjectPage; largeObject; largeObject = largeObject->next())
largeObject->countObjectsToSweep(classAgeCounts);
}
#endif
@@ -1503,14 +1503,14 @@ void FreeList::getFreeSizeStats(PerBucketFreeListStats bucketStats[], size_t& to
}
#endif
-HeapPage::HeapPage(PageMemory* storage, ThreadHeap* heap)
- : BaseHeapPage(storage, heap)
+NormalPage::NormalPage(PageMemory* storage, BaseHeap* heap)
+ : BasePage(storage, heap)
{
m_objectStartBitMapComputed = false;
ASSERT(isPageHeaderAddress(reinterpret_cast<Address>(this)));
}
-size_t HeapPage::objectPayloadSizeForTesting()
+size_t NormalPage::objectPayloadSizeForTesting()
{
size_t objectPayloadSize = 0;
Address headerAddress = payload();
@@ -1529,13 +1529,13 @@ size_t HeapPage::objectPayloadSizeForTesting()
return objectPayloadSize;
}
-bool HeapPage::isEmpty()
+bool NormalPage::isEmpty()
{
HeapObjectHeader* header = reinterpret_cast<HeapObjectHeader*>(payload());
return header->isFree() && header->size() == payloadSize();
}
-void HeapPage::sweep()
+void NormalPage::sweep()
{
clearObjectStartBitMap();
@@ -1547,7 +1547,7 @@ void HeapPage::sweep()
ASSERT(header->size() < blinkPagePayloadSize());
if (header->isPromptlyFreed())
- heapForHeapPage()->decreasePromptlyFreedSize(header->size());
+ heapForNormalPage()->decreasePromptlyFreedSize(header->size());
if (header->isFree()) {
size_t size = header->size();
// Zero the memory in the free list header to maintain the
@@ -1580,20 +1580,20 @@ void HeapPage::sweep()
}
if (startOfGap != headerAddress)
- heapForHeapPage()->addToFreeList(startOfGap, headerAddress - startOfGap);
+ heapForNormalPage()->addToFreeList(startOfGap, headerAddress - startOfGap);
header->unmark();
headerAddress += header->size();
markedObjectSize += header->size();
startOfGap = headerAddress;
}
if (startOfGap != payloadEnd())
- heapForHeapPage()->addToFreeList(startOfGap, payloadEnd() - startOfGap);
+ heapForNormalPage()->addToFreeList(startOfGap, payloadEnd() - startOfGap);
if (markedObjectSize)
Heap::increaseMarkedObjectSize(markedObjectSize);
}
-void HeapPage::markUnmarkedObjectsDead()
+void NormalPage::markUnmarkedObjectsDead()
{
for (Address headerAddress = payload(); headerAddress < payloadEnd();) {
HeapObjectHeader* header = reinterpret_cast<HeapObjectHeader*>(headerAddress);
@@ -1613,17 +1613,17 @@ void HeapPage::markUnmarkedObjectsDead()
}
}
-void HeapPage::removeFromHeap()
+void NormalPage::removeFromHeap()
{
- heapForHeapPage()->freePage(this);
+ heapForNormalPage()->freePage(this);
}
-ThreadHeapForHeapPage* HeapPage::heapForHeapPage()
+NormalPageHeap* NormalPage::heapForNormalPage()
{
- return static_cast<ThreadHeapForHeapPage*>(heap());
+ return static_cast<NormalPageHeap*>(heap());
}
-void HeapPage::populateObjectStartBitMap()
+void NormalPage::populateObjectStartBitMap()
{
memset(&m_objectStartBitMap, 0, objectStartBitMapSize);
Address start = payload();
@@ -1641,7 +1641,7 @@ void HeapPage::populateObjectStartBitMap()
m_objectStartBitMapComputed = true;
}
-void HeapPage::clearObjectStartBitMap()
+void NormalPage::clearObjectStartBitMap()
{
m_objectStartBitMapComputed = false;
}
@@ -1664,7 +1664,7 @@ static int numberOfLeadingZeroes(uint8_t byte)
return result;
}
-HeapObjectHeader* HeapPage::findHeaderFromAddress(Address address)
+HeapObjectHeader* NormalPage::findHeaderFromAddress(Address address)
{
if (address < payload())
return nullptr;
@@ -1691,7 +1691,7 @@ HeapObjectHeader* HeapPage::findHeaderFromAddress(Address address)
return header;
}
-void HeapPage::checkAndMarkPointer(Visitor* visitor, Address address)
+void NormalPage::checkAndMarkPointer(Visitor* visitor, Address address)
{
ASSERT(contains(address));
HeapObjectHeader* header = findHeaderFromAddress(address);
@@ -1704,7 +1704,7 @@ void HeapPage::checkAndMarkPointer(Visitor* visitor, Address address)
}
#if ENABLE(GC_PROFILING)
-const GCInfo* HeapPage::findGCInfo(Address address)
+const GCInfo* NormalPage::findGCInfo(Address address)
{
if (address < payload())
return nullptr;
@@ -1718,7 +1718,7 @@ const GCInfo* HeapPage::findGCInfo(Address address)
#endif
#if ENABLE(GC_PROFILING)
-void HeapPage::snapshot(TracedValue* json, ThreadState::SnapshotInfo* info)
+void NormalPage::snapshot(TracedValue* json, ThreadState::SnapshotInfo* info)
{
HeapObjectHeader* header = nullptr;
for (Address addr = payload(); addr < payloadEnd(); addr += header->size()) {
@@ -1750,7 +1750,7 @@ void HeapPage::snapshot(TracedValue* json, ThreadState::SnapshotInfo* info)
}
}
-void HeapPage::incrementMarkedObjectsAge()
+void NormalPage::incrementMarkedObjectsAge()
{
HeapObjectHeader* header = nullptr;
for (Address address = payload(); address < payloadEnd(); address += header->size()) {
@@ -1760,7 +1760,7 @@ void HeapPage::incrementMarkedObjectsAge()
}
}
-void HeapPage::countMarkedObjects(ClassAgeCountsMap& classAgeCounts)
+void NormalPage::countMarkedObjects(ClassAgeCountsMap& classAgeCounts)
{
HeapObjectHeader* header = nullptr;
for (Address address = payload(); address < payloadEnd(); address += header->size()) {
@@ -1772,7 +1772,7 @@ void HeapPage::countMarkedObjects(ClassAgeCountsMap& classAgeCounts)
}
}
-void HeapPage::countObjectsToSweep(ClassAgeCountsMap& classAgeCounts)
+void NormalPage::countObjectsToSweep(ClassAgeCountsMap& classAgeCounts)
{
HeapObjectHeader* header = nullptr;
for (Address address = payload(); address < payloadEnd(); address += header->size()) {
@@ -1785,14 +1785,14 @@ void HeapPage::countObjectsToSweep(ClassAgeCountsMap& classAgeCounts)
}
#endif
-size_t LargeObject::objectPayloadSizeForTesting()
+size_t LargeObjectPage::objectPayloadSizeForTesting()
{
markAsSwept();
return payloadSize();
}
#if ENABLE(GC_PROFILING)
-const GCInfo* LargeObject::findGCInfo(Address address)
+const GCInfo* LargeObjectPage::findGCInfo(Address address)
{
if (!containedInObjectPayload(address))
return nullptr;
@@ -1800,7 +1800,7 @@ const GCInfo* LargeObject::findGCInfo(Address address)
return Heap::gcInfo(header->gcInfoIndex());
}
-void LargeObject::snapshot(TracedValue* json, ThreadState::SnapshotInfo* info)
+void LargeObjectPage::snapshot(TracedValue* json, ThreadState::SnapshotInfo* info)
{
HeapObjectHeader* header = heapObjectHeader();
size_t tag = info->getClassTag(Heap::gcInfo(header->gcInfoIndex()));
@@ -1826,14 +1826,14 @@ void LargeObject::snapshot(TracedValue* json, ThreadState::SnapshotInfo* info)
}
}
-void LargeObject::incrementMarkedObjectsAge()
+void LargeObjectPage::incrementMarkedObjectsAge()
{
HeapObjectHeader* header = heapObjectHeader();
if (header->isMarked())
header->incrementAge();
}
-void LargeObject::countMarkedObjects(ClassAgeCountsMap& classAgeCounts)
+void LargeObjectPage::countMarkedObjects(ClassAgeCountsMap& classAgeCounts)
{
HeapObjectHeader* header = heapObjectHeader();
if (header->isMarked()) {
@@ -1842,7 +1842,7 @@ void LargeObject::countMarkedObjects(ClassAgeCountsMap& classAgeCounts)
}
}
-void LargeObject::countObjectsToSweep(ClassAgeCountsMap& classAgeCounts)
+void LargeObjectPage::countObjectsToSweep(ClassAgeCountsMap& classAgeCounts)
{
HeapObjectHeader* header = heapObjectHeader();
if (!header->isFree() && !header->isMarked()) {
@@ -2085,7 +2085,7 @@ protected:
if (Mode != ThreadLocalMarking)
return true;
- BaseHeapPage* page = pageFromObject(objectPointer);
+ BasePage* page = pageFromObject(objectPointer);
ASSERT(!page->orphaned());
// When doing a thread local GC, the marker checks if
// the object resides in another thread's heap. If it
@@ -2156,11 +2156,11 @@ void Heap::doShutdown()
}
#if ENABLE(ASSERT)
-BaseHeapPage* Heap::findPageFromAddress(Address address)
+BasePage* Heap::findPageFromAddress(Address address)
{
ASSERT(ThreadState::current()->isInGC());
for (ThreadState* state : ThreadState::attachedThreads()) {
- if (BaseHeapPage* page = state->findPageFromAddress(address))
+ if (BasePage* page = state->findPageFromAddress(address))
return page;
}
return nullptr;
@@ -2181,7 +2181,7 @@ Address Heap::checkAndMarkPointer(Visitor* visitor, Address address)
return nullptr;
#endif
- if (BaseHeapPage* page = lookup(address)) {
+ if (BasePage* page = lookup(address)) {
ASSERT(page->contains(address));
ASSERT(!page->orphaned());
ASSERT(!s_heapDoesNotContainCache->lookup(address));
@@ -2295,7 +2295,7 @@ void Heap::pushWeakCellPointerCallback(void** cell, WeakPointerCallback callback
void Heap::pushWeakPointerCallback(void* closure, void* object, WeakPointerCallback callback)
{
- BaseHeapPage* page = pageFromObject(object);
+ BasePage* page = pageFromObject(object);
ASSERT(!page->orphaned());
ThreadState* state = page->heap()->threadState();
state->pushWeakPointerCallback(closure, callback);
@@ -2538,10 +2538,10 @@ double Heap::estimatedMarkingTime()
return 0.0;
}
-void ThreadHeap::prepareHeapForTermination()
+void BaseHeap::prepareHeapForTermination()
{
ASSERT(!m_firstUnsweptPage);
- for (BaseHeapPage* page = m_firstPage; page; page = page->next()) {
+ for (BasePage* page = m_firstPage; page; page = page->next()) {
page->setTerminating();
}
}
@@ -2572,13 +2572,13 @@ void HeapAllocator::backingFree(void* address)
// Don't promptly free large objects because their page is never reused.
// Don't free backings allocated on other threads.
- BaseHeapPage* page = pageFromObject(address);
- if (page->isLargeObject() || page->heap()->threadState() != state)
+ BasePage* page = pageFromObject(address);
+ if (page->isLargeObjectPage() || page->heap()->threadState() != state)
return;
HeapObjectHeader* header = HeapObjectHeader::fromPayload(address);
header->checkHeader();
- static_cast<HeapPage*>(page)->heapForHeapPage()->promptlyFreeObject(header);
+ static_cast<NormalPage*>(page)->heapForNormalPage()->promptlyFreeObject(header);
}
void HeapAllocator::freeVectorBacking(void* address)
@@ -2609,13 +2609,13 @@ bool HeapAllocator::backingExpand(void* address, size_t newSize)
// FIXME: Support expand for large objects.
// Don't expand backings allocated on other threads.
- BaseHeapPage* page = pageFromObject(address);
- if (page->isLargeObject() || page->heap()->threadState() != state)
+ BasePage* page = pageFromObject(address);
+ if (page->isLargeObjectPage() || page->heap()->threadState() != state)
return false;
HeapObjectHeader* header = HeapObjectHeader::fromPayload(address);
header->checkHeader();
- return static_cast<HeapPage*>(page)->heapForHeapPage()->expandObject(header, newSize);
+ return static_cast<NormalPage*>(page)->heapForNormalPage()->expandObject(header, newSize);
}
bool HeapAllocator::expandVectorBacking(void* address, size_t newSize)
@@ -2652,13 +2652,13 @@ void HeapAllocator::backingShrink(void* address, size_t quantizedCurrentSize, si
// FIXME: Support shrink for large objects.
// Don't shrink backings allocated on other threads.
- BaseHeapPage* page = pageFromObject(address);
- if (page->isLargeObject() || page->heap()->threadState() != state)
+ BasePage* page = pageFromObject(address);
+ if (page->isLargeObjectPage() || page->heap()->threadState() != state)
return;
HeapObjectHeader* header = HeapObjectHeader::fromPayload(address);
header->checkHeader();
- static_cast<HeapPage*>(page)->heapForHeapPage()->shrinkObject(header, quantizedShrunkSize);
+ static_cast<NormalPage*>(page)->heapForNormalPage()->shrinkObject(header, quantizedShrunkSize);
}
void HeapAllocator::shrinkVectorBackingInternal(void* address, size_t quantizedCurrentSize, size_t quantizedShrunkSize)
@@ -2671,13 +2671,13 @@ void HeapAllocator::shrinkInlineVectorBackingInternal(void* address, size_t quan
backingShrink(address, quantizedCurrentSize, quantizedShrunkSize);
}
-BaseHeapPage* Heap::lookup(Address address)
+BasePage* Heap::lookup(Address address)
{
ASSERT(ThreadState::current()->isInGC());
if (!s_regionTree)
return nullptr;
if (PageMemoryRegion* region = s_regionTree->lookup(address)) {
- BaseHeapPage* page = region->pageFromAddress(address);
+ BasePage* page = region->pageFromAddress(address);
return page && !page->orphaned() ? page : nullptr;
}
return nullptr;
« no previous file with comments | « Source/platform/heap/Heap.h ('k') | Source/platform/heap/HeapTest.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698