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

Unified Diff: runtime/vm/freelist.cc

Issue 10802045: Revert "Favor free list allocation to bump pointer allocation." (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 8 years, 5 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 | « runtime/vm/freelist.h ('k') | runtime/vm/pages.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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;
« no previous file with comments | « runtime/vm/freelist.h ('k') | runtime/vm/pages.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698