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

Unified Diff: src/heap/mark-compact.cc

Issue 2418053002: Revert of [heap] Move slot filtering logic into sweeper. (Closed)
Patch Set: Created 4 years, 2 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 | « no previous file | src/heap/remembered-set.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/heap/mark-compact.cc
diff --git a/src/heap/mark-compact.cc b/src/heap/mark-compact.cc
index 1b343459e8bd013baa3918b92f2c5b6d7e36139a..fde7d8ecf25ca9b0981cbc7b38b6f0e5f255c154 100644
--- a/src/heap/mark-compact.cc
+++ b/src/heap/mark-compact.cc
@@ -3319,10 +3319,9 @@
Page* p, FreeListRebuildingMode free_list_mode,
FreeSpaceTreatmentMode free_space_mode) {
Space* space = p->owner();
- AllocationSpace identity = space->identity();
DCHECK_NOT_NULL(space);
- DCHECK(free_list_mode == IGNORE_FREE_LIST || identity == OLD_SPACE ||
- identity == CODE_SPACE || identity == MAP_SPACE);
+ DCHECK(free_list_mode == IGNORE_FREE_LIST || space->identity() == OLD_SPACE ||
+ space->identity() == CODE_SPACE || space->identity() == MAP_SPACE);
DCHECK(!p->IsEvacuationCandidate() && !p->SweepingDone());
// Before we sweep objects on the page, we free dead array buffers which
@@ -3351,8 +3350,6 @@
LiveObjectIterator<kBlackObjects> it(p);
HeapObject* object = NULL;
- bool clear_slots =
- p->old_to_new_slots() && (identity == OLD_SPACE || identity == MAP_SPACE);
while ((object = it.Next()) != NULL) {
DCHECK(Marking::IsBlack(ObjectMarking::MarkBitFrom(object)));
Address free_end = object->address();
@@ -3368,11 +3365,6 @@
} else {
p->heap()->CreateFillerObjectAt(free_start, size,
ClearRecordedSlots::kNo);
- }
-
- if (clear_slots) {
- RememberedSet<OLD_TO_NEW>::RemoveRange(p, free_start, free_end,
- SlotSet::KEEP_EMPTY_BUCKETS);
}
}
Map* map = object->synchronized_map();
@@ -3389,6 +3381,9 @@
free_start = free_end + size;
}
+ // Clear the mark bits of that page and reset live bytes count.
+ p->ClearLiveness();
+
if (free_start != p->area_end()) {
int size = static_cast<int>(p->area_end() - free_start);
if (free_space_mode == ZAP_FREE_SPACE) {
@@ -3402,16 +3397,7 @@
p->heap()->CreateFillerObjectAt(free_start, size,
ClearRecordedSlots::kNo);
}
-
- if (clear_slots) {
- RememberedSet<OLD_TO_NEW>::RemoveRange(p, free_start, p->area_end(),
- SlotSet::KEEP_EMPTY_BUCKETS);
- }
- }
-
- // Clear the mark bits of that page and reset live bytes count.
- p->ClearLiveness();
-
+ }
p->concurrent_sweeping_state().SetValue(Page::kSweepingDone);
if (free_list_mode == IGNORE_FREE_LIST) return 0;
return FreeList::GuaranteedAllocatable(static_cast<int>(max_freed_bytes));
@@ -3827,7 +3813,9 @@
if (identity == NEW_SPACE) {
RawSweep(page, IGNORE_FREE_LIST, free_space_mode);
} else {
- if (identity == CODE_SPACE) {
+ if (identity == OLD_SPACE || identity == MAP_SPACE) {
+ RememberedSet<OLD_TO_NEW>::ClearInvalidSlots(heap_, page);
+ } else {
RememberedSet<OLD_TO_NEW>::ClearInvalidTypedSlots(heap_, page);
}
max_freed = RawSweep(page, REBUILD_FREE_LIST, free_space_mode);
« no previous file with comments | « no previous file | src/heap/remembered-set.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698