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

Unified Diff: src/heap/heap.cc

Issue 2498583002: [heap] Minor MC: Add marking (Closed)
Patch Set: Fix uncommitting of markingdeque Created 4 years, 1 month 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/heap/heap.cc
diff --git a/src/heap/heap.cc b/src/heap/heap.cc
index 89f1b61281a40fc709a63b2b3bbb137f2b6ddcf1..87c8b28f4b504bc187a6b14b1f8ef39085b7cec7 100644
--- a/src/heap/heap.cc
+++ b/src/heap/heap.cc
@@ -1321,7 +1321,26 @@ bool Heap::PerformGarbageCollection(
MinorMarkCompact();
break;
case SCAVENGER:
+#ifdef VERIFY_HEAP
+ std::vector<HeapObject*> objects_in_to_space;
+ if (FLAG_verify_minor_mc_marking) {
+ objects_in_to_space = mark_compact_collector()->GetObjectsInToSpace();
+ mark_compact_collector()->MarkYoungGenerationForVerification();
+ isolate()->global_handles()->ResetNewSpaceHandlesForTesting();
+ }
+#endif // VERIFY_HEAP
Scavenge();
+#ifdef VERIFY_HEAP
+ if (FLAG_verify_minor_mc_marking) {
+ mark_compact_collector()
+ ->VerifyYoungGenerationMarkbitsUsingForwardingPointers(
+ objects_in_to_space);
+ for (Page* p : NewSpacePageRange(new_space()->FromSpaceStart(),
+ new_space()->FromSpaceEnd())) {
+ p->ClearLiveness();
+ }
+ }
+#endif // VERIFY_HEAP
break;
}
@@ -1502,21 +1521,6 @@ static bool IsUnscavengedHeapObject(Heap* heap, Object** p) {
!HeapObject::cast(*p)->map_word().IsForwardingAddress();
}
-
-static bool IsUnmodifiedHeapObject(Object** p) {
- Object* object = *p;
- if (object->IsSmi()) return false;
- HeapObject* heap_object = HeapObject::cast(object);
- if (!object->IsJSObject()) return false;
- JSObject* js_object = JSObject::cast(object);
- if (!js_object->WasConstructedFromApiFunction()) return false;
- JSFunction* constructor =
- JSFunction::cast(js_object->map()->GetConstructor());
-
- return constructor->initial_map() == heap_object->map();
-}
-
-
void PromotionQueue::Initialize() {
// The last to-space page may be used for promotion queue. On promotion
// conflict, we use the emergency stack.
@@ -1691,8 +1695,10 @@ void Heap::Scavenge() {
isolate()->global_handles()->MarkNewSpaceWeakUnmodifiedObjectsPending(
&IsUnscavengedHeapObject);
- isolate()->global_handles()->IterateNewSpaceWeakUnmodifiedRoots(
- &scavenge_visitor);
+ isolate()
+ ->global_handles()
+ ->IterateNewSpaceWeakUnmodifiedRoots<GlobalHandles::HANDLE_PHANTOM_NODES>(
+ &scavenge_visitor);
new_space_front = DoScavenge(&scavenge_visitor, new_space_front);
UpdateNewSpaceReferencesInExternalStringTable(
@@ -2904,6 +2910,18 @@ bool Heap::RootCanBeTreatedAsConstant(RootListIndex root_index) {
!InNewSpace(root(root_index));
}
+bool Heap::IsUnmodifiedHeapObject(Object** p) {
+ Object* object = *p;
+ if (object->IsSmi()) return false;
+ HeapObject* heap_object = HeapObject::cast(object);
+ if (!object->IsJSObject()) return false;
+ JSObject* js_object = JSObject::cast(object);
+ if (!js_object->WasConstructedFromApiFunction()) return false;
+ JSFunction* constructor =
+ JSFunction::cast(js_object->map()->GetConstructor());
+
+ return constructor->initial_map() == heap_object->map();
+}
int Heap::FullSizeNumberStringCacheLength() {
// Compute the size of the number string cache based on the max newspace size.

Powered by Google App Engine
This is Rietveld 408576698