Chromium Code Reviews| Index: runtime/vm/heap.cc |
| diff --git a/runtime/vm/heap.cc b/runtime/vm/heap.cc |
| index 4998b881cfdc1c4876e1cbf79b991a4853aaa9c1..39cc7ba39c2467c90d301cf560b31b7985e17ae1 100644 |
| --- a/runtime/vm/heap.cc |
| +++ b/runtime/vm/heap.cc |
| @@ -38,7 +38,8 @@ Heap::Heap(Isolate* isolate, |
| barrier_done_(new Monitor()), |
| read_only_(false), |
| gc_new_space_in_progress_(false), |
| - gc_old_space_in_progress_(false) { |
| + gc_old_space_in_progress_(false), |
| + debug_gc_in_progress_(false) { |
| UpdateGlobalMaxUsed(); |
| for (int sel = 0; sel < kNumWeakSelectors; sel++) { |
| new_weak_tables_[sel] = new WeakTable(); |
| @@ -375,7 +376,11 @@ void Heap::CollectNewSpaceGarbage(Thread* thread, |
| VMTagScope tagScope(thread, VMTag::kGCNewSpaceTagId); |
| TIMELINE_FUNCTION_GC_DURATION(thread, "CollectNewGeneration"); |
| NOT_IN_PRODUCT(UpdateClassHeapStatsBeforeGC(kNew)); |
| - new_space_.Scavenge(invoke_api_callbacks); |
| + if (debug_gc_in_progress_) { |
| + new_space_.Evacuate(); |
| + } else { |
| + new_space_.Scavenge(invoke_api_callbacks); |
| + } |
| NOT_IN_PRODUCT(isolate()->class_table()->UpdatePromoted()); |
| RecordAfterGC(kNew); |
| PrintStats(); |
| @@ -444,8 +449,10 @@ void Heap::CollectGarbage(Space space) { |
| void Heap::CollectAllGarbage() { |
| Thread* thread = Thread::Current(); |
| + debug_gc_in_progress_ = true; |
|
rmacnak
2017/06/19 19:29:00
Can this be
new_space_.Evacuate();
CollectOldSpac
|
| CollectNewSpaceGarbage(thread, kInvokeApiCallbacks, kFull); |
| CollectOldSpaceGarbage(thread, kInvokeApiCallbacks, kFull); |
| + debug_gc_in_progress_ = false; |
| } |