Chromium Code Reviews| 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); |
| } |