diff options
Diffstat (limited to 'deps/v8/test/unittests/heap/memory-reducer-unittest.cc')
-rw-r--r-- | deps/v8/test/unittests/heap/memory-reducer-unittest.cc | 247 |
1 files changed, 110 insertions, 137 deletions
diff --git a/deps/v8/test/unittests/heap/memory-reducer-unittest.cc b/deps/v8/test/unittests/heap/memory-reducer-unittest.cc index d0986bb81f..16023efadd 100644 --- a/deps/v8/test/unittests/heap/memory-reducer-unittest.cc +++ b/deps/v8/test/unittests/heap/memory-reducer-unittest.cc @@ -11,26 +11,6 @@ namespace v8 { namespace internal { -MemoryReducer::State DoneState() { - return MemoryReducer::State(MemoryReducer::kDone, 0, 0.0, 1.0, 0); -} - -MemoryReducer::State DoneState(size_t committed_memory) { - return MemoryReducer::State(MemoryReducer::kDone, 0, 0.0, 1.0, - committed_memory); -} - -MemoryReducer::State WaitState(int started_gcs, double next_gc_start_ms) { - return MemoryReducer::State(MemoryReducer::kWait, started_gcs, - next_gc_start_ms, 1.0, 0); -} - - -MemoryReducer::State RunState(int started_gcs, double next_gc_start_ms) { - return MemoryReducer::State(MemoryReducer::kRun, started_gcs, - next_gc_start_ms, 1.0, 0); -} - MemoryReducer::Event MarkCompactEvent(double time_ms, bool next_gc_likely_to_collect_more, size_t committed_memory) { @@ -88,248 +68,241 @@ MemoryReducer::Event PossibleGarbageEvent(double time_ms) { TEST(MemoryReducer, FromDoneToDone) { - MemoryReducer::State state0(DoneState()), state1(DoneState()); + MemoryReducer::State state0(MemoryReducer::State::CreateDone(1.0, 0)), + state1(MemoryReducer::State::CreateDone(1.0, 0)); state1 = MemoryReducer::Step(state0, TimerEventLowAllocationRate(0)); - EXPECT_EQ(MemoryReducer::kDone, state1.action); + EXPECT_EQ(MemoryReducer::kDone, state1.id()); state1 = MemoryReducer::Step(state0, TimerEventHighAllocationRate(0)); - EXPECT_EQ(MemoryReducer::kDone, state1.action); + EXPECT_EQ(MemoryReducer::kDone, state1.id()); state1 = MemoryReducer::Step(state0, TimerEventPendingGC(0)); - EXPECT_EQ(MemoryReducer::kDone, state1.action); + EXPECT_EQ(MemoryReducer::kDone, state1.id()); state1 = MemoryReducer::Step( state0, MarkCompactEventGarbageLeft(0, MemoryReducer::kCommittedMemoryDelta - 1)); - EXPECT_EQ(MemoryReducer::kDone, state1.action); + EXPECT_EQ(MemoryReducer::kDone, state1.id()); - state0 = DoneState(1000 * MB); + state0 = MemoryReducer::State::CreateDone(1, 1000 * MB); state1 = MemoryReducer::Step( state0, MarkCompactEventGarbageLeft( 0, static_cast<size_t>( 1000 * MB * MemoryReducer::kCommittedMemoryFactor) - 1)); - EXPECT_EQ(MemoryReducer::kDone, state1.action); + EXPECT_EQ(MemoryReducer::kDone, state1.id()); } TEST(MemoryReducer, FromDoneToWait) { if (!v8_flags.incremental_marking) return; - MemoryReducer::State state0(DoneState()), state1(DoneState()); + MemoryReducer::State state0(MemoryReducer::State::CreateDone(1.0, 0)), + state1(MemoryReducer::State::CreateDone(1.0, 0)); state1 = MemoryReducer::Step( state0, MarkCompactEventGarbageLeft(2, MemoryReducer::kCommittedMemoryDelta)); - EXPECT_EQ(MemoryReducer::kWait, state1.action); + EXPECT_EQ(MemoryReducer::kWait, state1.id()); EXPECT_EQ(v8_flags.gc_memory_reducer_start_delay_ms + 2, - state1.next_gc_start_ms); - EXPECT_EQ(0, state1.started_gcs); - EXPECT_EQ(2, state1.last_gc_time_ms); + state1.next_gc_start_ms()); + EXPECT_EQ(0, state1.started_gcs()); + EXPECT_EQ(2, state1.last_gc_time_ms()); state1 = MemoryReducer::Step( state0, MarkCompactEventNoGarbageLeft(2, MemoryReducer::kCommittedMemoryDelta)); - EXPECT_EQ(MemoryReducer::kWait, state1.action); + EXPECT_EQ(MemoryReducer::kWait, state1.id()); EXPECT_EQ(v8_flags.gc_memory_reducer_start_delay_ms + 2, - state1.next_gc_start_ms); - EXPECT_EQ(0, state1.started_gcs); - EXPECT_EQ(2, state1.last_gc_time_ms); + state1.next_gc_start_ms()); + EXPECT_EQ(0, state1.started_gcs()); + EXPECT_EQ(2, state1.last_gc_time_ms()); state1 = MemoryReducer::Step(state0, PossibleGarbageEvent(0)); - EXPECT_EQ(MemoryReducer::kWait, state1.action); - EXPECT_EQ(v8_flags.gc_memory_reducer_start_delay_ms, state1.next_gc_start_ms); - EXPECT_EQ(0, state1.started_gcs); - EXPECT_EQ(state0.last_gc_time_ms, state1.last_gc_time_ms); + EXPECT_EQ(MemoryReducer::kWait, state1.id()); + EXPECT_EQ(v8_flags.gc_memory_reducer_start_delay_ms, + state1.next_gc_start_ms()); + EXPECT_EQ(0, state1.started_gcs()); + EXPECT_EQ(state0.last_gc_time_ms(), state1.last_gc_time_ms()); - state0 = DoneState(1000 * MB); + state0 = MemoryReducer::State::CreateDone(1, 1000 * MB); state1 = MemoryReducer::Step( state0, MarkCompactEventGarbageLeft( 2, static_cast<size_t>( 1000 * MB * MemoryReducer::kCommittedMemoryFactor))); - EXPECT_EQ(MemoryReducer::kWait, state1.action); + EXPECT_EQ(MemoryReducer::kWait, state1.id()); EXPECT_EQ(v8_flags.gc_memory_reducer_start_delay_ms + 2, - state1.next_gc_start_ms); - EXPECT_EQ(0, state1.started_gcs); - EXPECT_EQ(2, state1.last_gc_time_ms); + state1.next_gc_start_ms()); + EXPECT_EQ(0, state1.started_gcs()); + EXPECT_EQ(2, state1.last_gc_time_ms()); } TEST(MemoryReducer, FromWaitToWait) { if (!v8_flags.incremental_marking) return; - MemoryReducer::State state0(WaitState(2, 1000.0)), state1(DoneState()); + MemoryReducer::State state0(MemoryReducer::State::CreateWait(2, 1000.0, 1)), + state1(MemoryReducer::State::CreateDone(1.0, 0)); state1 = MemoryReducer::Step(state0, PossibleGarbageEvent(2000)); - EXPECT_EQ(MemoryReducer::kWait, state1.action); - EXPECT_EQ(state0.next_gc_start_ms, state1.next_gc_start_ms); - EXPECT_EQ(state0.started_gcs, state1.started_gcs); + EXPECT_EQ(MemoryReducer::kWait, state1.id()); + EXPECT_EQ(state0.next_gc_start_ms(), state1.next_gc_start_ms()); + EXPECT_EQ(state0.started_gcs(), state1.started_gcs()); state1 = MemoryReducer::Step( - state0, TimerEventLowAllocationRate(state0.next_gc_start_ms - 1)); - EXPECT_EQ(MemoryReducer::kWait, state1.action); - EXPECT_EQ(state0.next_gc_start_ms, state1.next_gc_start_ms); - EXPECT_EQ(state0.started_gcs, state1.started_gcs); + state0, TimerEventLowAllocationRate(state0.next_gc_start_ms() - 1)); + EXPECT_EQ(MemoryReducer::kWait, state1.id()); + EXPECT_EQ(state0.next_gc_start_ms(), state1.next_gc_start_ms()); + EXPECT_EQ(state0.started_gcs(), state1.started_gcs()); state1 = MemoryReducer::Step(state0, TimerEventHighAllocationRate(2000)); - EXPECT_EQ(MemoryReducer::kWait, state1.action); - EXPECT_EQ(2000 + MemoryReducer::kLongDelayMs, state1.next_gc_start_ms); - EXPECT_EQ(state0.started_gcs, state1.started_gcs); + EXPECT_EQ(MemoryReducer::kWait, state1.id()); + EXPECT_EQ(2000 + MemoryReducer::kLongDelayMs, state1.next_gc_start_ms()); + EXPECT_EQ(state0.started_gcs(), state1.started_gcs()); state1 = MemoryReducer::Step(state0, TimerEventPendingGC(2000)); - EXPECT_EQ(MemoryReducer::kWait, state1.action); - EXPECT_EQ(2000 + MemoryReducer::kLongDelayMs, state1.next_gc_start_ms); - EXPECT_EQ(state0.started_gcs, state1.started_gcs); + EXPECT_EQ(MemoryReducer::kWait, state1.id()); + EXPECT_EQ(2000 + MemoryReducer::kLongDelayMs, state1.next_gc_start_ms()); + EXPECT_EQ(state0.started_gcs(), state1.started_gcs()); state1 = MemoryReducer::Step(state0, MarkCompactEventGarbageLeft(2000, 0)); - EXPECT_EQ(MemoryReducer::kWait, state1.action); - EXPECT_EQ(2000 + MemoryReducer::kLongDelayMs, state1.next_gc_start_ms); - EXPECT_EQ(state0.started_gcs, state1.started_gcs); - EXPECT_EQ(2000, state1.last_gc_time_ms); + EXPECT_EQ(MemoryReducer::kWait, state1.id()); + EXPECT_EQ(2000 + MemoryReducer::kLongDelayMs, state1.next_gc_start_ms()); + EXPECT_EQ(state0.started_gcs(), state1.started_gcs()); + EXPECT_EQ(2000, state1.last_gc_time_ms()); state1 = MemoryReducer::Step(state0, MarkCompactEventNoGarbageLeft(2000, 0)); - EXPECT_EQ(MemoryReducer::kWait, state1.action); - EXPECT_EQ(2000 + MemoryReducer::kLongDelayMs, state1.next_gc_start_ms); - EXPECT_EQ(state0.started_gcs, state1.started_gcs); - EXPECT_EQ(2000, state1.last_gc_time_ms); + EXPECT_EQ(MemoryReducer::kWait, state1.id()); + EXPECT_EQ(2000 + MemoryReducer::kLongDelayMs, state1.next_gc_start_ms()); + EXPECT_EQ(state0.started_gcs(), state1.started_gcs()); + EXPECT_EQ(2000, state1.last_gc_time_ms()); + + state0 = MemoryReducer::State::CreateWait(2, 1000.0, 0); - state0.last_gc_time_ms = 0; state1 = MemoryReducer::Step( state0, TimerEventHighAllocationRate(MemoryReducer::kWatchdogDelayMs + 1)); - EXPECT_EQ(MemoryReducer::kWait, state1.action); + EXPECT_EQ(MemoryReducer::kWait, state1.id()); EXPECT_EQ(MemoryReducer::kWatchdogDelayMs + 1 + MemoryReducer::kLongDelayMs, - state1.next_gc_start_ms); - EXPECT_EQ(state0.started_gcs, state1.started_gcs); - EXPECT_EQ(state0.last_gc_time_ms, state1.last_gc_time_ms); + state1.next_gc_start_ms()); + EXPECT_EQ(state0.started_gcs(), state1.started_gcs()); + EXPECT_EQ(state0.last_gc_time_ms(), state1.last_gc_time_ms()); - state0.last_gc_time_ms = 1; + state0 = MemoryReducer::State::CreateWait(2, 1000.0, 1); state1 = MemoryReducer::Step(state0, TimerEventHighAllocationRate(2000)); - EXPECT_EQ(MemoryReducer::kWait, state1.action); - EXPECT_EQ(2000 + MemoryReducer::kLongDelayMs, state1.next_gc_start_ms); - EXPECT_EQ(state0.started_gcs, state1.started_gcs); - EXPECT_EQ(state0.last_gc_time_ms, state1.last_gc_time_ms); + EXPECT_EQ(MemoryReducer::kWait, state1.id()); + EXPECT_EQ(2000 + MemoryReducer::kLongDelayMs, state1.next_gc_start_ms()); + EXPECT_EQ(state0.started_gcs(), state1.started_gcs()); + EXPECT_EQ(state0.last_gc_time_ms(), state1.last_gc_time_ms()); } TEST(MemoryReducer, FromWaitToRun) { if (!v8_flags.incremental_marking) return; - MemoryReducer::State state0(WaitState(0, 1000.0)), state1(DoneState()); + MemoryReducer::State state0(MemoryReducer::State::CreateWait(0, 1000.0, 1)), + state1(MemoryReducer::State::CreateDone(1.0, 0)); state1 = MemoryReducer::Step( - state0, TimerEventLowAllocationRate(state0.next_gc_start_ms + 1)); - EXPECT_EQ(MemoryReducer::kRun, state1.action); - EXPECT_EQ(0, state1.next_gc_start_ms); - EXPECT_EQ(state0.started_gcs + 1, state1.started_gcs); + state0, TimerEventLowAllocationRate(state0.next_gc_start_ms() + 1)); + EXPECT_EQ(MemoryReducer::kRun, state1.id()); + EXPECT_EQ(state0.started_gcs() + 1, state1.started_gcs()); state1 = MemoryReducer::Step( state0, TimerEventHighAllocationRate(MemoryReducer::kWatchdogDelayMs + 2)); - EXPECT_EQ(MemoryReducer::kRun, state1.action); - EXPECT_EQ(0, state1.next_gc_start_ms); - EXPECT_EQ(state0.started_gcs + 1, state1.started_gcs); - EXPECT_EQ(state0.last_gc_time_ms, state1.last_gc_time_ms); + EXPECT_EQ(MemoryReducer::kRun, state1.id()); + EXPECT_EQ(state0.started_gcs() + 1, state1.started_gcs()); } TEST(MemoryReducer, FromWaitToDone) { if (!v8_flags.incremental_marking) return; - MemoryReducer::State state0(WaitState(2, 0.0)), state1(DoneState()); - - state0.started_gcs = MemoryReducer::kMaxNumberOfGCs; + MemoryReducer::State state0( + MemoryReducer::State::CreateWait(MemoryReducer::kMaxNumberOfGCs, 0.0, 1)), + state1(MemoryReducer::State::CreateDone(1.0, 0)); state1 = MemoryReducer::Step(state0, TimerEventLowAllocationRate(2000)); - EXPECT_EQ(MemoryReducer::kDone, state1.action); - EXPECT_EQ(0, state1.next_gc_start_ms); - EXPECT_EQ(MemoryReducer::kMaxNumberOfGCs, state1.started_gcs); - EXPECT_EQ(state0.last_gc_time_ms, state1.last_gc_time_ms); + EXPECT_EQ(MemoryReducer::kDone, state1.id()); + EXPECT_EQ(MemoryReducer::kMaxNumberOfGCs, state1.started_gcs()); + EXPECT_EQ(state0.last_gc_time_ms(), state1.last_gc_time_ms()); state1 = MemoryReducer::Step(state0, TimerEventHighAllocationRate(2000)); - EXPECT_EQ(MemoryReducer::kDone, state1.action); - EXPECT_EQ(0, state1.next_gc_start_ms); - EXPECT_EQ(MemoryReducer::kMaxNumberOfGCs, state1.started_gcs); - EXPECT_EQ(state0.last_gc_time_ms, state1.last_gc_time_ms); + EXPECT_EQ(MemoryReducer::kDone, state1.id()); + EXPECT_EQ(MemoryReducer::kMaxNumberOfGCs, state1.started_gcs()); + EXPECT_EQ(state0.last_gc_time_ms(), state1.last_gc_time_ms()); state1 = MemoryReducer::Step(state0, TimerEventPendingGC(2000)); - EXPECT_EQ(MemoryReducer::kDone, state1.action); - EXPECT_EQ(0, state1.next_gc_start_ms); - EXPECT_EQ(MemoryReducer::kMaxNumberOfGCs, state1.started_gcs); - EXPECT_EQ(state0.last_gc_time_ms, state1.last_gc_time_ms); + EXPECT_EQ(MemoryReducer::kDone, state1.id()); + EXPECT_EQ(MemoryReducer::kMaxNumberOfGCs, state1.started_gcs()); + EXPECT_EQ(state0.last_gc_time_ms(), state1.last_gc_time_ms()); } TEST(MemoryReducer, FromRunToRun) { if (!v8_flags.incremental_marking) return; - MemoryReducer::State state0(RunState(1, 0.0)), state1(DoneState()); + MemoryReducer::State state0(MemoryReducer::State::CreateRun(1)), + state1(MemoryReducer::State::CreateDone(1.0, 0)); state1 = MemoryReducer::Step(state0, TimerEventLowAllocationRate(2000)); - EXPECT_EQ(MemoryReducer::kRun, state1.action); - EXPECT_EQ(state0.next_gc_start_ms, state1.next_gc_start_ms); - EXPECT_EQ(state0.started_gcs, state1.started_gcs); - EXPECT_EQ(state0.last_gc_time_ms, state1.last_gc_time_ms); + EXPECT_EQ(MemoryReducer::kRun, state1.id()); + EXPECT_EQ(state0.started_gcs(), state1.started_gcs()); state1 = MemoryReducer::Step(state0, TimerEventHighAllocationRate(2000)); - EXPECT_EQ(MemoryReducer::kRun, state1.action); - EXPECT_EQ(state0.next_gc_start_ms, state1.next_gc_start_ms); - EXPECT_EQ(state0.started_gcs, state1.started_gcs); - EXPECT_EQ(state0.last_gc_time_ms, state1.last_gc_time_ms); + EXPECT_EQ(MemoryReducer::kRun, state1.id()); + EXPECT_EQ(state0.started_gcs(), state1.started_gcs()); state1 = MemoryReducer::Step(state0, TimerEventPendingGC(2000)); - EXPECT_EQ(MemoryReducer::kRun, state1.action); - EXPECT_EQ(state0.next_gc_start_ms, state1.next_gc_start_ms); - EXPECT_EQ(state0.started_gcs, state1.started_gcs); - EXPECT_EQ(state0.last_gc_time_ms, state1.last_gc_time_ms); + EXPECT_EQ(MemoryReducer::kRun, state1.id()); + EXPECT_EQ(state0.started_gcs(), state1.started_gcs()); state1 = MemoryReducer::Step(state0, PossibleGarbageEvent(2000)); - EXPECT_EQ(MemoryReducer::kRun, state1.action); - EXPECT_EQ(state0.next_gc_start_ms, state1.next_gc_start_ms); - EXPECT_EQ(state0.started_gcs, state1.started_gcs); - EXPECT_EQ(state0.last_gc_time_ms, state1.last_gc_time_ms); + EXPECT_EQ(MemoryReducer::kRun, state1.id()); + EXPECT_EQ(state0.started_gcs(), state1.started_gcs()); } TEST(MemoryReducer, FromRunToDone) { if (!v8_flags.incremental_marking) return; - MemoryReducer::State state0(RunState(2, 0.0)), state1(DoneState()); + MemoryReducer::State state0(MemoryReducer::State::CreateRun(2)), + state1(MemoryReducer::State::CreateDone(1.0, 0)); state1 = MemoryReducer::Step(state0, MarkCompactEventNoGarbageLeft(2000, 0)); - EXPECT_EQ(MemoryReducer::kDone, state1.action); - EXPECT_EQ(0, state1.next_gc_start_ms); - EXPECT_EQ(MemoryReducer::kMaxNumberOfGCs, state1.started_gcs); - EXPECT_EQ(2000, state1.last_gc_time_ms); + EXPECT_EQ(MemoryReducer::kDone, state1.id()); + EXPECT_EQ(MemoryReducer::kMaxNumberOfGCs, state1.started_gcs()); + EXPECT_EQ(2000, state1.last_gc_time_ms()); - state0.started_gcs = MemoryReducer::kMaxNumberOfGCs; + state0 = MemoryReducer::State::CreateRun(MemoryReducer::kMaxNumberOfGCs); state1 = MemoryReducer::Step(state0, MarkCompactEventGarbageLeft(2000, 0)); - EXPECT_EQ(MemoryReducer::kDone, state1.action); - EXPECT_EQ(0, state1.next_gc_start_ms); - EXPECT_EQ(2000, state1.last_gc_time_ms); + EXPECT_EQ(MemoryReducer::kDone, state1.id()); + EXPECT_EQ(state1.started_gcs(), state1.started_gcs()); } TEST(MemoryReducer, FromRunToWait) { if (!v8_flags.incremental_marking) return; - MemoryReducer::State state0(RunState(2, 0.0)), state1(DoneState()); + MemoryReducer::State state0(MemoryReducer::State::CreateRun(2)), + state1(MemoryReducer::State::CreateDone(1.0, 0)); state1 = MemoryReducer::Step(state0, MarkCompactEventGarbageLeft(2000, 0)); - EXPECT_EQ(MemoryReducer::kWait, state1.action); - EXPECT_EQ(2000 + MemoryReducer::kShortDelayMs, state1.next_gc_start_ms); - EXPECT_EQ(state0.started_gcs, state1.started_gcs); - EXPECT_EQ(2000, state1.last_gc_time_ms); + EXPECT_EQ(MemoryReducer::kWait, state1.id()); + EXPECT_EQ(2000 + MemoryReducer::kShortDelayMs, state1.next_gc_start_ms()); + EXPECT_EQ(state0.started_gcs(), state1.started_gcs()); + EXPECT_EQ(2000, state1.last_gc_time_ms()); - state0.started_gcs = 1; + state0 = MemoryReducer::State::CreateRun(1); state1 = MemoryReducer::Step(state0, MarkCompactEventNoGarbageLeft(2000, 0)); - EXPECT_EQ(MemoryReducer::kWait, state1.action); - EXPECT_EQ(2000 + MemoryReducer::kShortDelayMs, state1.next_gc_start_ms); - EXPECT_EQ(state0.started_gcs, state1.started_gcs); - EXPECT_EQ(2000, state1.last_gc_time_ms); + EXPECT_EQ(MemoryReducer::kWait, state1.id()); + EXPECT_EQ(2000 + MemoryReducer::kShortDelayMs, state1.next_gc_start_ms()); + EXPECT_EQ(state0.started_gcs(), state1.started_gcs()); + EXPECT_EQ(2000, state1.last_gc_time_ms()); } } // namespace internal |