| Index: runtime/vm/heap.cc
|
| diff --git a/runtime/vm/heap.cc b/runtime/vm/heap.cc
|
| index 6f5149707890f6957f98faf676bf7322b02af712..823d1bbe16031776fe2ed917f4c9a0a8bbd41558 100644
|
| --- a/runtime/vm/heap.cc
|
| +++ b/runtime/vm/heap.cc
|
| @@ -408,6 +408,18 @@ void Heap::UpdateClassHeapStatsBeforeGC(Heap::Space space) {
|
| }
|
| #endif
|
|
|
| +void Heap::NotifyIdle(int64_t deadline) {
|
| + if (new_space_.ShouldPerformIdleScavenge(deadline)) {
|
| + Thread* thread = Thread::Current();
|
| + TIMELINE_FUNCTION_GC_DURATION(thread, "IdleGC");
|
| + int64_t start = OS::GetCurrentMonotonicMicros();
|
| + CollectNewSpaceGarbage(thread, kIdle);
|
| + int64_t end = OS::GetCurrentMonotonicMicros();
|
| + OS::Print("idle scavenge duration=%" Pd64 "us headroom=%" Pd64 "us\n",
|
| + end - start, deadline - end);
|
| + }
|
| +}
|
| +
|
| void Heap::EvacuateNewSpace(Thread* thread, GCReason reason) {
|
| ASSERT(reason == kFull);
|
| if (BeginNewSpaceGC(thread)) {
|
| @@ -426,7 +438,7 @@ void Heap::EvacuateNewSpace(Thread* thread, GCReason reason) {
|
|
|
| void Heap::CollectNewSpaceGarbage(Thread* thread,
|
| GCReason reason) {
|
| - ASSERT((reason == kNewSpace) || (reason == kFull));
|
| + ASSERT((reason == kNewSpace) || (reason == kFull) || (reason == kIdle));
|
| if (BeginNewSpaceGC(thread)) {
|
| RecordBeforeGC(kNew, reason);
|
| {
|
| @@ -680,6 +692,8 @@ const char* Heap::GCReasonToString(GCReason gc_reason) {
|
| return "old space";
|
| case kFull:
|
| return "full";
|
| + case kIdle:
|
| + return "idle";
|
| case kGCAtAlloc:
|
| return "debugging";
|
| case kGCTestCase:
|
|
|