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

Unified Diff: runtime/vm/heap.cc

Issue 2964503005: Debug garbage collector does not correctly remove cross-gen garbage (Closed)
Patch Set: Created 3 years, 6 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/heap.cc
diff --git a/runtime/vm/heap.cc b/runtime/vm/heap.cc
index 975d0d55c27a38cdea105418f05c13953f0103a2..634b75d31f71961cb0ed8e9b328e0823aa68e57f 100644
--- a/runtime/vm/heap.cc
+++ b/runtime/vm/heap.cc
@@ -364,6 +364,21 @@ void Heap::UpdateClassHeapStatsBeforeGC(Heap::Space space) {
}
#endif
rmacnak 2017/06/30 22:24:56 Two lines between functions (clang-format doesn't
danunez 2017/06/30 22:33:58 Done.
+void Heap::EvacuateNewSpaceGarbage(Thread* thread, GCReason reason) {
+ ASSERT(reason == kFull);
+ if (BeginNewSpaceGC(thread)) {
+ RecordBeforeGC(kNew, kFull);
+ VMTagScope tagScope(thread, VMTag::kGCNewSpaceTagId);
+ TIMELINE_FUNCTION_GC_DURATION(thread, "CollectNewGeneration");
rmacnak 2017/06/30 22:24:56 "EvacuateNewGeneration"
danunez 2017/06/30 22:33:58 Done.
+ NOT_IN_PRODUCT(UpdateClassHeapStatsBeforeGC(kNew));
+ new_space_.Evacuate();
+ NOT_IN_PRODUCT(isolate()->class_table()->UpdatePromoted());
+ RecordAfterGC(kNew);
+ PrintStats();
+ NOT_IN_PRODUCT(PrintStatsToTimeline(&tds));
+ EndNewSpaceGC();
+ }
+}
rmacnak 2017/06/30 22:24:56 Two lines
danunez 2017/06/30 22:33:58 Done.
void Heap::CollectNewSpaceGarbage(Thread* thread,
ApiCallbacks api_callbacks,
@@ -444,7 +459,10 @@ void Heap::CollectGarbage(Space space) {
void Heap::CollectAllGarbage() {
Thread* thread = Thread::Current();
- CollectNewSpaceGarbage(thread, kInvokeApiCallbacks, kFull);
+
+ // New space is evacuated so this GC will collect all dead objects
+ // kept alive by a cross-generational pointer.
+ EvacuateNewSpaceGarbage(thread, kFull);
CollectOldSpaceGarbage(thread, kInvokeApiCallbacks, kFull);
}
« runtime/vm/heap.h ('K') | « runtime/vm/heap.h ('k') | runtime/vm/heap_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698