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

Unified Diff: src/incremental-marking.cc

Issue 6713075: Create an abstraction (MarkBit) object to hold the location of the... (Closed) Base URL: http://v8.googlecode.com/svn/branches/experimental/gc/
Patch Set: '' Created 9 years, 9 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: src/incremental-marking.cc
===================================================================
--- src/incremental-marking.cc (revision 7247)
+++ src/incremental-marking.cc (working copy)
@@ -52,10 +52,12 @@
private:
// Mark object pointed to by p.
INLINE(static void MarkObjectByPointer(Object** p)) {
- if ((*p)->IsHeapObject()) {
- HeapObject* object = HeapObject::cast(*p);
- if (IncrementalMarking::IsWhite(object)) {
- IncrementalMarking::WhiteToGrey(object);
+ Object* obj = *p;
+ if (obj->IsHeapObject()) {
+ HeapObject* heap_object = HeapObject::cast(obj);
+ MarkBit mark_bit = Marking::MarkBitFrom(heap_object);
+ if (IncrementalMarking::IsWhite(mark_bit)) {
+ IncrementalMarking::WhiteToGrey(heap_object, mark_bit);
}
}
}
@@ -76,11 +78,13 @@
private:
void MarkObjectByPointer(Object** p) {
- if (!(*p)->IsHeapObject()) return;
+ Object* obj = *p;
+ if (!obj->IsHeapObject()) return;
- HeapObject* object = HeapObject::cast(*p);
- if (IncrementalMarking::IsWhite(object)) {
- IncrementalMarking::WhiteToGrey(object);
+ HeapObject* heap_object = HeapObject::cast(obj);
+ MarkBit mark_bit = Marking::MarkBitFrom(heap_object);
+ if (IncrementalMarking::IsWhite(mark_bit)) {
+ IncrementalMarking::WhiteToGrey(heap_object, mark_bit);
}
}
};
@@ -177,11 +181,11 @@
Heap::new_space()->FromSpaceHigh());
// Clear markbits.
- Address new_space_top = Heap::new_space()->top();
Address new_space_bottom = Heap::new_space()->bottom();
+ uintptr_t new_space_size =
+ RoundUp(Heap::new_space()->top() - new_space_bottom, 32 * kPointerSize);
- Marking::ClearRange(new_space_bottom,
- static_cast<int>(new_space_top - new_space_bottom));
+ Marking::ClearRange(new_space_bottom, new_space_size);
ClearMarkbits();
@@ -217,7 +221,9 @@
// correct only for objects that occupy at least two words.
if (obj->map() != filler_map) {
obj->Iterate(&marking_visitor);
- MarkBlack(obj); }
+ MarkBit mark_bit = Marking::MarkBitFrom(obj);
+ MarkBlack(mark_bit);
+ }
}
state_ = COMPLETE;
if (FLAG_trace_incremental_marking) {
@@ -267,13 +273,15 @@
// Explicitly skip one word fillers. Incremental markbit patterns are
// correct only for objects that occupy at least two words.
if (obj->map() != filler_map) {
- ASSERT(IsGrey(obj));
+ ASSERT(IsGrey(Marking::MarkBitFrom(obj)));
Map* map = obj->map();
int size = obj->SizeFromMap(map);
bytes_to_process -= size;
- if (IsWhite(map)) WhiteToGrey(map);
+ MarkBit map_mark_bit = Marking::MarkBitFrom(map);
+ if (IsWhite(map_mark_bit)) WhiteToGrey(map, map_mark_bit);
obj->IterateBody(map->instance_type(), size, &marking_visitor);
- MarkBlack(obj);
+ MarkBit obj_mark_bit = Marking::MarkBitFrom(obj);
+ MarkBlack(obj_mark_bit);
}
count++;
}

Powered by Google App Engine
This is Rietveld 408576698