| Index: src/heap/spaces.cc
|
| diff --git a/src/heap/spaces.cc b/src/heap/spaces.cc
|
| index ea713f116b5c0bc30e0d8d15bad8ad370bd35ced..6b47c95bb086bd3af66f83ab552bfe5f7e0146d6 100644
|
| --- a/src/heap/spaces.cc
|
| +++ b/src/heap/spaces.cc
|
| @@ -570,11 +570,6 @@
|
| return true;
|
| }
|
|
|
| -size_t MemoryChunk::CommittedPhysicalMemory() {
|
| - if (!base::VirtualMemory::HasLazyCommits() || owner()->identity() == LO_SPACE)
|
| - return size();
|
| - return high_water_mark_.Value();
|
| -}
|
|
|
| void MemoryChunk::InsertAfter(MemoryChunk* other) {
|
| MemoryChunk* other_next = other->next_chunk();
|
| @@ -742,27 +737,6 @@
|
| available_in_free_list_ = 0;
|
| }
|
|
|
| -void MemoryAllocator::PartialFreeMemory(MemoryChunk* chunk,
|
| - Address start_free) {
|
| - // We do not allow partial shrink for code.
|
| - DCHECK(chunk->executable() == NOT_EXECUTABLE);
|
| -
|
| - intptr_t size;
|
| - base::VirtualMemory* reservation = chunk->reserved_memory();
|
| - DCHECK(reservation->IsReserved());
|
| - size = static_cast<intptr_t>(reservation->size());
|
| -
|
| - size_t to_free_size = size - (start_free - chunk->address());
|
| -
|
| - DCHECK(size_.Value() >= static_cast<intptr_t>(to_free_size));
|
| - size_.Increment(-static_cast<intptr_t>(to_free_size));
|
| - isolate_->counters()->memory_allocated()->Decrement(
|
| - static_cast<int>(to_free_size));
|
| - chunk->set_size(size - to_free_size);
|
| -
|
| - reservation->ReleasePartial(start_free);
|
| -}
|
| -
|
| void MemoryAllocator::PreFreeMemory(MemoryChunk* chunk) {
|
| DCHECK(!chunk->IsFlagSet(MemoryChunk::PRE_FREED));
|
| LOG(isolate_, DeleteEvent("MemoryChunk", chunk));
|
| @@ -2934,31 +2908,6 @@
|
| void MapSpace::VerifyObject(HeapObject* object) { CHECK(object->IsMap()); }
|
| #endif
|
|
|
| -Address LargePage::GetAddressToShrink() {
|
| - HeapObject* object = GetObject();
|
| - if (executable() == EXECUTABLE) {
|
| - return 0;
|
| - }
|
| - size_t used_size = RoundUp((object->address() - address()) + object->Size(),
|
| - base::OS::CommitPageSize());
|
| - if (used_size < CommittedPhysicalMemory()) {
|
| - return address() + used_size;
|
| - }
|
| - return 0;
|
| -}
|
| -
|
| -void LargePage::ClearOutOfLiveRangeSlots(Address free_start) {
|
| - if (old_to_new_slots() != nullptr) {
|
| - old_to_new_slots()->RemoveRange(
|
| - static_cast<int>(free_start - address()),
|
| - static_cast<int>(free_start + size() - address()));
|
| - }
|
| - if (old_to_old_slots() != nullptr) {
|
| - old_to_old_slots()->RemoveRange(
|
| - static_cast<int>(free_start - address()),
|
| - static_cast<int>(free_start + size() - address()));
|
| - }
|
| -}
|
|
|
| // -----------------------------------------------------------------------------
|
| // LargeObjectIterator
|
| @@ -3032,7 +2981,16 @@
|
| page->set_next_page(first_page_);
|
| first_page_ = page;
|
|
|
| - InsertChunkMapEntries(page);
|
| + // Register all MemoryChunk::kAlignment-aligned chunks covered by
|
| + // this large page in the chunk map.
|
| + uintptr_t base = reinterpret_cast<uintptr_t>(page) / MemoryChunk::kAlignment;
|
| + uintptr_t limit = base + (page->size() - 1) / MemoryChunk::kAlignment;
|
| + for (uintptr_t key = base; key <= limit; key++) {
|
| + base::HashMap::Entry* entry = chunk_map_.LookupOrInsert(
|
| + reinterpret_cast<void*>(key), static_cast<uint32_t>(key));
|
| + DCHECK(entry != NULL);
|
| + entry->value = page;
|
| + }
|
|
|
| HeapObject* object = page->GetObject();
|
| MSAN_ALLOCATED_UNINITIALIZED_MEMORY(object->address(), object_size);
|
| @@ -3098,35 +3056,6 @@
|
| }
|
| }
|
|
|
| -void LargeObjectSpace::InsertChunkMapEntries(LargePage* page) {
|
| - // Register all MemoryChunk::kAlignment-aligned chunks covered by
|
| - // this large page in the chunk map.
|
| - uintptr_t start = reinterpret_cast<uintptr_t>(page) / MemoryChunk::kAlignment;
|
| - uintptr_t limit = (reinterpret_cast<uintptr_t>(page) + (page->size() - 1)) /
|
| - MemoryChunk::kAlignment;
|
| - for (uintptr_t key = start; key <= limit; key++) {
|
| - base::HashMap::Entry* entry = chunk_map_.InsertNew(
|
| - reinterpret_cast<void*>(key), static_cast<uint32_t>(key));
|
| - DCHECK(entry != NULL);
|
| - entry->value = page;
|
| - }
|
| -}
|
| -
|
| -void LargeObjectSpace::RemoveChunkMapEntries(LargePage* page) {
|
| - RemoveChunkMapEntries(page, page->address());
|
| -}
|
| -
|
| -void LargeObjectSpace::RemoveChunkMapEntries(LargePage* page,
|
| - Address free_start) {
|
| - uintptr_t start = RoundUp(reinterpret_cast<uintptr_t>(free_start),
|
| - MemoryChunk::kAlignment) /
|
| - MemoryChunk::kAlignment;
|
| - uintptr_t limit = (reinterpret_cast<uintptr_t>(page) + (page->size() - 1)) /
|
| - MemoryChunk::kAlignment;
|
| - for (uintptr_t key = start; key <= limit; key++) {
|
| - chunk_map_.Remove(reinterpret_cast<void*>(key), static_cast<uint32_t>(key));
|
| - }
|
| -}
|
|
|
| void LargeObjectSpace::FreeUnmarkedObjects() {
|
| LargePage* previous = NULL;
|
| @@ -3136,13 +3065,6 @@
|
| MarkBit mark_bit = Marking::MarkBitFrom(object);
|
| DCHECK(!Marking::IsGrey(mark_bit));
|
| if (Marking::IsBlack(mark_bit)) {
|
| - Address free_start;
|
| - if ((free_start = current->GetAddressToShrink()) != 0) {
|
| - // TODO(hpayer): Perform partial free concurrently.
|
| - current->ClearOutOfLiveRangeSlots(free_start);
|
| - RemoveChunkMapEntries(current, free_start);
|
| - heap()->memory_allocator()->PartialFreeMemory(current, free_start);
|
| - }
|
| previous = current;
|
| current = current->next_page();
|
| } else {
|
| @@ -3161,7 +3083,17 @@
|
| objects_size_ -= object->Size();
|
| page_count_--;
|
|
|
| - RemoveChunkMapEntries(page);
|
| + // Remove entries belonging to this page.
|
| + // Use variable alignment to help pass length check (<= 80 characters)
|
| + // of single line in tools/presubmit.py.
|
| + const intptr_t alignment = MemoryChunk::kAlignment;
|
| + uintptr_t base = reinterpret_cast<uintptr_t>(page) / alignment;
|
| + uintptr_t limit = base + (page->size() - 1) / alignment;
|
| + for (uintptr_t key = base; key <= limit; key++) {
|
| + chunk_map_.Remove(reinterpret_cast<void*>(key),
|
| + static_cast<uint32_t>(key));
|
| + }
|
| +
|
| heap()->memory_allocator()->Free<MemoryAllocator::kPreFreeAndQueue>(page);
|
| }
|
| }
|
|
|