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

Unified Diff: src/heap/spaces.cc

Issue 2139133003: [heap] Untangle Marking and friends from heap dependencies. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: fix comment formatting Created 4 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 | « src/heap/spaces.h ('k') | src/heap/spaces-inl.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/heap/spaces.cc
diff --git a/src/heap/spaces.cc b/src/heap/spaces.cc
index 329b3acda1b022c2c017b2a50e59af3b79f8c91c..b94478cfdea48c27d25bb7f28a9df35bcbb46fb1 100644
--- a/src/heap/spaces.cc
+++ b/src/heap/spaces.cc
@@ -500,7 +500,7 @@ MemoryChunk* MemoryChunk::Initialize(Heap* heap, Address base, size_t size,
chunk->available_in_free_list_ = 0;
chunk->wasted_memory_ = 0;
chunk->ResetLiveBytes();
- Bitmap::Clear(chunk);
+ chunk->ClearLiveness();
chunk->set_next_chunk(nullptr);
chunk->set_prev_chunk(nullptr);
chunk->local_tracker_ = nullptr;
@@ -1060,6 +1060,11 @@ void MemoryChunk::ReleaseLocalTracker() {
local_tracker_ = nullptr;
}
+void MemoryChunk::ClearLiveness() {
+ markbits()->Clear();
+ ResetLiveBytes();
+}
+
// -----------------------------------------------------------------------------
// PagedSpace implementation
@@ -1228,7 +1233,7 @@ bool PagedSpace::Expand() {
// black.
if (heap()->incremental_marking()->black_allocation() &&
identity() == OLD_SPACE) {
- Bitmap::SetAllBits(p);
+ p->markbits()->SetAllBits();
p->SetFlag(Page::BLACK_PAGE);
if (FLAG_trace_incremental_marking) {
PrintIsolate(heap()->isolate(), "Added black page %p\n",
@@ -1327,7 +1332,7 @@ void PagedSpace::Verify(ObjectVisitor* visitor) {
int size = object->Size();
object->IterateBody(map->instance_type(), size, visitor);
if (!page->IsFlagSet(Page::BLACK_PAGE) &&
- Marking::IsBlack(Marking::MarkBitFrom(object))) {
+ Marking::IsBlack(ObjectMarking::MarkBitFrom(object))) {
black_size += size;
}
@@ -1462,7 +1467,7 @@ bool SemiSpace::EnsureCurrentCapacity() {
if (current_page == nullptr) return false;
DCHECK_NOT_NULL(current_page);
current_page->InsertAfter(anchor());
- Bitmap::Clear(current_page);
+ current_page->ClearLiveness();
current_page->SetFlags(anchor()->prev_page()->GetFlags(),
Page::kCopyAllFlags);
heap()->CreateFillerObjectAt(current_page->area_start(),
@@ -1530,7 +1535,7 @@ void NewSpace::ResetAllocationInfo() {
UpdateAllocationInfo();
// Clear all mark-bits in the to-space.
for (Page* p : to_space_) {
- Bitmap::Clear(p);
+ p->ClearLiveness();
}
InlineAllocationStep(old_top, allocation_info_.top(), nullptr, 0);
}
@@ -1828,7 +1833,7 @@ bool SemiSpace::GrowTo(int new_capacity) {
return false;
}
new_page->InsertAfter(last_page);
- Bitmap::Clear(new_page);
+ new_page->ClearLiveness();
// Duplicate the flags that was set on the old page.
new_page->SetFlags(last_page->GetFlags(), Page::kCopyOnFlipFlagsMask);
last_page = new_page;
@@ -2909,7 +2914,7 @@ void LargeObjectSpace::ClearMarkingStateOfLiveObjects() {
LargePage* current = first_page_;
while (current != NULL) {
HeapObject* object = current->GetObject();
- MarkBit mark_bit = Marking::MarkBitFrom(object);
+ MarkBit mark_bit = ObjectMarking::MarkBitFrom(object);
DCHECK(Marking::IsBlack(mark_bit));
Marking::BlackToWhite(mark_bit);
Page::FromAddress(object->address())->ResetProgressBar();
@@ -2953,7 +2958,7 @@ void LargeObjectSpace::FreeUnmarkedObjects() {
LargePage* current = first_page_;
while (current != NULL) {
HeapObject* object = current->GetObject();
- MarkBit mark_bit = Marking::MarkBitFrom(object);
+ MarkBit mark_bit = ObjectMarking::MarkBitFrom(object);
DCHECK(!Marking::IsGrey(mark_bit));
if (Marking::IsBlack(mark_bit)) {
Address free_start;
@@ -3085,7 +3090,7 @@ void Page::Print() {
unsigned mark_size = 0;
for (HeapObject* object = objects.Next(); object != NULL;
object = objects.Next()) {
- bool is_marked = Marking::IsBlackOrGrey(Marking::MarkBitFrom(object));
+ bool is_marked = Marking::IsBlackOrGrey(ObjectMarking::MarkBitFrom(object));
PrintF(" %c ", (is_marked ? '!' : ' ')); // Indent a little.
if (is_marked) {
mark_size += object->Size();
« no previous file with comments | « src/heap/spaces.h ('k') | src/heap/spaces-inl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698