Chromium Code Reviews| Index: src/heap/spaces.cc |
| diff --git a/src/heap/spaces.cc b/src/heap/spaces.cc |
| index 187d4997383d2c821f359f2a7c6405d30b5490fb..50a213e8ae4f582a3a684b4639c73894616fb851 100644 |
| --- a/src/heap/spaces.cc |
| +++ b/src/heap/spaces.cc |
| @@ -2262,10 +2262,10 @@ intptr_t FreeList::Concatenate(FreeList* other) { |
| wasted_bytes_ += wasted_bytes; |
| other->wasted_bytes_ = 0; |
| - usable_bytes += small_list_.Concatenate(other->small_list()); |
| - usable_bytes += medium_list_.Concatenate(other->medium_list()); |
| - usable_bytes += large_list_.Concatenate(other->large_list()); |
| - usable_bytes += huge_list_.Concatenate(other->huge_list()); |
| + usable_bytes += small_list_.Concatenate(other->GetFreeListCategory(kSmall)); |
| + usable_bytes += medium_list_.Concatenate(other->GetFreeListCategory(kMedium)); |
| + usable_bytes += large_list_.Concatenate(other->GetFreeListCategory(kLarge)); |
| + usable_bytes += huge_list_.Concatenate(other->GetFreeListCategory(kHuge)); |
| if (!other->owner()->is_local()) other->mutex()->Unlock(); |
| if (!owner()->is_local()) mutex_.Unlock(); |
| @@ -2318,38 +2318,40 @@ int FreeList::Free(Address start, int size_in_bytes) { |
| } |
| +FreeSpace* FreeList::FindNodeIn(FreeListCategoryType category, int* node_size) { |
|
Michael Lippautz
2015/10/08 14:45:01
FYI: This one will be used in a follow-up CL for f
|
| + FreeSpace* node = GetFreeListCategory(category)->PickNodeFromList(node_size); |
| + if (node != nullptr) { |
| + Page::FromAddress(node->address()) |
| + ->add_available_in_free_list(category, -(*node_size)); |
| + DCHECK(IsVeryLong() || available() == SumFreeLists()); |
| + } |
| + return node; |
| +} |
| + |
| + |
| FreeSpace* FreeList::FindNodeFor(int size_in_bytes, int* node_size) { |
| FreeSpace* node = NULL; |
| Page* page = NULL; |
| if (size_in_bytes <= kSmallAllocationMax) { |
| - node = small_list_.PickNodeFromList(node_size); |
| + node = FindNodeIn(kSmall, node_size); |
| if (node != NULL) { |
| - DCHECK(size_in_bytes <= *node_size); |
| - page = Page::FromAddress(node->address()); |
| - page->add_available_in_small_free_list(-(*node_size)); |
| DCHECK(IsVeryLong() || available() == SumFreeLists()); |
| return node; |
| } |
| } |
| if (size_in_bytes <= kMediumAllocationMax) { |
| - node = medium_list_.PickNodeFromList(node_size); |
| + node = FindNodeIn(kMedium, node_size); |
| if (node != NULL) { |
| - DCHECK(size_in_bytes <= *node_size); |
| - page = Page::FromAddress(node->address()); |
| - page->add_available_in_medium_free_list(-(*node_size)); |
| DCHECK(IsVeryLong() || available() == SumFreeLists()); |
| return node; |
| } |
| } |
| if (size_in_bytes <= kLargeAllocationMax) { |
| - node = large_list_.PickNodeFromList(node_size); |
| + node = FindNodeIn(kLarge, node_size); |
| if (node != NULL) { |
| - DCHECK(size_in_bytes <= *node_size); |
| - page = Page::FromAddress(node->address()); |
| - page->add_available_in_large_free_list(-(*node_size)); |
| DCHECK(IsVeryLong() || available() == SumFreeLists()); |
| return node; |
| } |