Index: src/heap/gc-idle-time-handler-unittest.cc |
diff --git a/src/heap/gc-idle-time-handler-unittest.cc b/src/heap/gc-idle-time-handler-unittest.cc |
index 195a88dcc1fe79630b4ffae6ea67607479b57563..b4f2f74f57b245b96f7e4f28908664ab3e012a50 100644 |
--- a/src/heap/gc-idle-time-handler-unittest.cc |
+++ b/src/heap/gc-idle-time-handler-unittest.cc |
@@ -315,5 +315,34 @@ TEST_F(GCIdleTimeHandlerTest, ScavengeAndDone) { |
EXPECT_EQ(DO_NOTHING, action.type); |
} |
+ |
+TEST_F(GCIdleTimeHandlerTest, ZeroIdleTimeNothingToDo) { |
+ GCIdleTimeHandler::HeapState heap_state = DefaultHeapState(); |
+ int idle_time_ms = 0; |
+ GCIdleTimeAction action = handler()->Compute(idle_time_ms, heap_state); |
+ EXPECT_EQ(DO_NOTHING, action.type); |
+} |
+ |
+ |
+TEST_F(GCIdleTimeHandlerTest, ZeroIdleTimeDoNothingButStartIdleRound) { |
+ GCIdleTimeHandler::HeapState heap_state = DefaultHeapState(); |
+ int idle_time_ms = 10; |
+ for (int i = 0; i < GCIdleTimeHandler::kMaxMarkCompactsInIdleRound; i++) { |
+ GCIdleTimeAction action = handler()->Compute(idle_time_ms, heap_state); |
+ if (action.type == DONE) break; |
+ EXPECT_EQ(DO_INCREMENTAL_MARKING, action.type); |
+ // In this case we try to emulate incremental marking steps the finish with |
+ // a full gc. |
+ handler()->NotifyIdleMarkCompact(); |
+ } |
+ GCIdleTimeAction action = handler()->Compute(idle_time_ms, heap_state); |
+ // Emulate mutator work. |
+ for (int i = 0; i < GCIdleTimeHandler::kIdleScavengeThreshold; i++) { |
+ handler()->NotifyScavenge(); |
+ } |
+ action = handler()->Compute(0, heap_state); |
+ EXPECT_EQ(DO_NOTHING, action.type); |
+} |
+ |
} // namespace internal |
} // namespace v8 |