| Index: runtime/vm/freelist.cc
|
| diff --git a/runtime/vm/freelist.cc b/runtime/vm/freelist.cc
|
| index e2b14d9bb888c43ab1951372a02d73bea4404241..959607e94eef99183345725f3aba5ea20348b8b1 100644
|
| --- a/runtime/vm/freelist.cc
|
| +++ b/runtime/vm/freelist.cc
|
| @@ -49,14 +49,14 @@ FreeList::~FreeList() {
|
|
|
| uword FreeList::TryAllocate(intptr_t size) {
|
| int index = IndexForSize(size);
|
| - if ((index != kNumLists) && free_map_[index]) {
|
| + if ((index != kNumLists) && (free_lists_[index] != NULL)) {
|
| return reinterpret_cast<uword>(DequeueElement(index));
|
| }
|
|
|
| if (index < kNumLists) {
|
| index++;
|
| while (index < kNumLists) {
|
| - if (free_map_[index]) {
|
| + if (free_lists_[index] != NULL) {
|
| // Dequeue an element from the list, split and enqueue the remainder in
|
| // the appropriate list.
|
| FreeListElement* element = DequeueElement(index);
|
| @@ -96,13 +96,11 @@ void FreeList::Free(uword addr, intptr_t size) {
|
|
|
|
|
| void FreeList::Reset() {
|
| - free_map_.reset();
|
| for (int i = 0; i < (kNumLists + 1); i++) {
|
| free_lists_[i] = NULL;
|
| }
|
| }
|
|
|
| -
|
| intptr_t FreeList::IndexForSize(intptr_t size) {
|
| ASSERT(size >= kObjectAlignment);
|
| ASSERT(Utils::IsAligned(size, kObjectAlignment));
|
| @@ -116,61 +114,18 @@ intptr_t FreeList::IndexForSize(intptr_t size) {
|
|
|
|
|
| void FreeList::EnqueueElement(FreeListElement* element, intptr_t index) {
|
| - FreeListElement* next = free_lists_[index];
|
| - if (next == NULL) {
|
| - free_map_[index] = true;
|
| - }
|
| - element->set_next(next);
|
| + element->set_next(free_lists_[index]);
|
| free_lists_[index] = element;
|
| }
|
|
|
|
|
| FreeListElement* FreeList::DequeueElement(intptr_t index) {
|
| FreeListElement* result = free_lists_[index];
|
| - FreeListElement* next = result->next();
|
| - if (next == NULL) {
|
| - free_map_[index] = false;
|
| - }
|
| - free_lists_[index] = next;
|
| + free_lists_[index] = result->next();
|
| return result;
|
| }
|
|
|
|
|
| -intptr_t FreeList::Length(int index) const {
|
| - ASSERT(index >= 0);
|
| - ASSERT(index < kNumLists);
|
| - intptr_t result = 0;
|
| - FreeListElement* element = free_lists_[index];
|
| - while (element != NULL) {
|
| - ++result;
|
| - element = element->next();
|
| - }
|
| - return result;
|
| -}
|
| -
|
| -
|
| -void FreeList::Print() const {
|
| - OS::Print("%*s %*s %*s\n", 10, "Class", 10, "Length", 10, "Size");
|
| - OS::Print("--------------------------------\n");
|
| - int total_index = 0;
|
| - int total_length = 0;
|
| - int total_size = 0;
|
| - for (int i = 0; i < kNumLists; ++i) {
|
| - if (free_lists_[i] == NULL) {
|
| - continue;
|
| - }
|
| - total_index += 1;
|
| - intptr_t length = Length(i);
|
| - total_length += length;
|
| - intptr_t size = length * i * kObjectAlignment;
|
| - total_size += size;
|
| - OS::Print("%*d %*d %*d\n", 10, i * kObjectAlignment, 10, length, 10, size);
|
| - }
|
| - OS::Print("--------------------------------\n");
|
| - OS::Print("%*d %*d %*d\n", 10, total_index, 10, total_length, 10, total_size);
|
| -}
|
| -
|
| -
|
| void FreeList::SplitElementAfterAndEnqueue(FreeListElement* element,
|
| intptr_t size) {
|
| intptr_t remainder_size = element->Size() - size;
|
|
|