| Index: src/heap/spaces.cc
|
| diff --git a/src/heap/spaces.cc b/src/heap/spaces.cc
|
| index 259ee75e0d09b978c8ac6ed93ac3e18331a346fd..969129bcad297d7c2f22b7118cad9b650deb4f54 100644
|
| --- a/src/heap/spaces.cc
|
| +++ b/src/heap/spaces.cc
|
| @@ -2218,6 +2218,38 @@ intptr_t FreeList::Concatenate(FreeList* free_list) {
|
| }
|
|
|
|
|
| +void FreeList::Divide(FreeList** free_lists, int num, intptr_t limit) {
|
| + CHECK(num > 0);
|
| + CHECK(free_lists != nullptr);
|
| + if (limit == 0) {
|
| + limit = std::numeric_limits<intptr_t>::max();
|
| + }
|
| + int size = 0;
|
| + int cnt = 0;
|
| + FreeSpace* space = nullptr;
|
| + while (((space = huge_list_.PickNodeFromList(&size)) != nullptr) &&
|
| + (free_lists[cnt % num]->available() < limit)) {
|
| + free_lists[cnt % num]->huge_list_.Free(space, size);
|
| + cnt++;
|
| + }
|
| + while (((space = large_list_.PickNodeFromList(&size)) != nullptr) &&
|
| + (free_lists[cnt % num]->available() < limit)) {
|
| + free_lists[cnt % num]->large_list_.Free(space, size);
|
| + cnt++;
|
| + }
|
| + while (((space = medium_list_.PickNodeFromList(&size)) != nullptr) &&
|
| + (free_lists[cnt % num]->available() < limit)) {
|
| + free_lists[cnt % num]->medium_list_.Free(space, size);
|
| + cnt++;
|
| + }
|
| + while (((space = small_list_.PickNodeFromList(&size)) != nullptr) &&
|
| + (free_lists[cnt % num]->available() < limit)) {
|
| + free_lists[cnt % num]->small_list_.Free(space, size);
|
| + cnt++;
|
| + }
|
| +}
|
| +
|
| +
|
| void FreeList::Reset() {
|
| small_list_.Reset();
|
| medium_list_.Reset();
|
|
|