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

Unified Diff: runtime/vm/freelist.cc

Issue 10450014: Request for comments on overall approach. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: fix scavenger and freelist handling Created 8 years, 7 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
Index: runtime/vm/freelist.cc
diff --git a/runtime/vm/freelist.cc b/runtime/vm/freelist.cc
index 054a023c39425c902e6af1db4f7cee2ae9ecd7bf..3a0dc0a581a46cdce3ea569c3b7d6acc3ca03e60 100644
--- a/runtime/vm/freelist.cc
+++ b/runtime/vm/freelist.cc
@@ -25,33 +25,23 @@ RawClass* AllocateFakeClass() {
}
-RawClass* FreeListElement::minimal_element_class_ = NULL;
-RawClass* FreeListElement::element_class_ = NULL;
-
+RawClass* FreeListElement::freelist_class_ = NULL;
FreeListElement* FreeListElement::AsElement(uword addr, intptr_t size) {
ASSERT(size >= kObjectAlignment);
ASSERT(Utils::IsAligned(size, kObjectAlignment));
FreeListElement* result = reinterpret_cast<FreeListElement*>(addr);
- if (size == kObjectAlignment) {
- result->class_ = minimal_element_class_;
- } else {
- result->class_ = element_class_;
- *result->SizeAddress() = size;
- }
result->set_next(NULL);
- ASSERT(result->Size() == size);
+ result->set_size(size);
return result;
}
void FreeListElement::InitOnce() {
ASSERT(sizeof(FreeListElement) == kObjectAlignment);
- ASSERT(minimal_element_class_ == NULL);
- ASSERT(element_class_ == NULL);
- minimal_element_class_ = AllocateFakeClass();
- element_class_ = AllocateFakeClass();
+ ASSERT(OFFSET_OF(FreeListElement, next_) == Object::tags_offset());
+ freelist_class_ = AllocateFakeClass();
}
@@ -88,7 +78,7 @@ uword FreeList::TryAllocate(intptr_t size) {
FreeListElement* previous = NULL;
FreeListElement* current = free_lists_[kNumLists];
while (current != NULL) {
- if (current->Size() >= size) {
+ if (current->size() >= size) {
// Found an element large enough to hold the requested size. Dequeue,
// split and enqueue the remainder.
if (previous == NULL) {
@@ -146,7 +136,7 @@ FreeListElement* FreeList::DequeueElement(intptr_t index) {
void FreeList::SplitElementAfterAndEnqueue(FreeListElement* element,
intptr_t size) {
- intptr_t remainder_size = element->Size() - size;
+ intptr_t remainder_size = element->size() - size;
if (remainder_size == 0) return;
element = FreeListElement::AsElement(reinterpret_cast<uword>(element) + size,

Powered by Google App Engine
This is Rietveld 408576698