diff options
Diffstat (limited to 'third_party/libwebrtc/test/pc/e2e/analyzer/video/dvqa/pausable_state_test.cc')
-rw-r--r-- | third_party/libwebrtc/test/pc/e2e/analyzer/video/dvqa/pausable_state_test.cc | 399 |
1 files changed, 399 insertions, 0 deletions
diff --git a/third_party/libwebrtc/test/pc/e2e/analyzer/video/dvqa/pausable_state_test.cc b/third_party/libwebrtc/test/pc/e2e/analyzer/video/dvqa/pausable_state_test.cc new file mode 100644 index 0000000000..ee48ddee06 --- /dev/null +++ b/third_party/libwebrtc/test/pc/e2e/analyzer/video/dvqa/pausable_state_test.cc @@ -0,0 +1,399 @@ +/* + * Copyright (c) 2023 The WebRTC project authors. All Rights Reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ + +#include "test/pc/e2e/analyzer/video/dvqa/pausable_state.h" + +#include <memory> + +#include "api/test/time_controller.h" +#include "api/units/time_delta.h" +#include "api/units/timestamp.h" +#include "system_wrappers/include/clock.h" +#include "test/gtest.h" +#include "test/time_controller/simulated_time_controller.h" + +namespace webrtc { +namespace { + +class PausableStateTest : public testing::Test { + protected: + PausableStateTest() + : time_controller_(std::make_unique<GlobalSimulatedTimeController>( + Timestamp::Seconds(1000))) {} + + void AdvanceTime(TimeDelta time) { time_controller_->AdvanceTime(time); } + + Clock* GetClock() { return time_controller_->GetClock(); } + + Timestamp Now() const { return time_controller_->GetClock()->CurrentTime(); } + + private: + std::unique_ptr<TimeController> time_controller_; +}; + +TEST_F(PausableStateTest, NewIsActive) { + PausableState state(GetClock()); + + EXPECT_FALSE(state.IsPaused()); +} + +TEST_F(PausableStateTest, IsPausedAfterPaused) { + PausableState state(GetClock()); + + state.Pause(); + EXPECT_TRUE(state.IsPaused()); +} + +TEST_F(PausableStateTest, IsActiveAfterResume) { + PausableState state(GetClock()); + + state.Pause(); + state.Resume(); + EXPECT_FALSE(state.IsPaused()); +} + +TEST_F(PausableStateTest, PauseAlreadyPausedIsNoOp) { + PausableState state(GetClock()); + + AdvanceTime(TimeDelta::Seconds(1)); + Timestamp test_time = Now(); + state.Pause(); + AdvanceTime(TimeDelta::Seconds(1)); + state.Pause(); + + EXPECT_EQ(state.GetLastEventTime(), test_time); +} + +TEST_F(PausableStateTest, ResumeAlreadyResumedIsNoOp) { + PausableState state(GetClock()); + + AdvanceTime(TimeDelta::Seconds(1)); + state.Pause(); + AdvanceTime(TimeDelta::Seconds(1)); + Timestamp test_time = Now(); + state.Resume(); + AdvanceTime(TimeDelta::Seconds(1)); + state.Resume(); + + EXPECT_EQ(state.GetLastEventTime(), test_time); +} + +TEST_F(PausableStateTest, WasPausedAtFalseWhenMultiplePauseResumeAtSameTime) { + PausableState state(GetClock()); + + state.Pause(); + state.Resume(); + state.Pause(); + state.Resume(); + state.Pause(); + state.Resume(); + EXPECT_FALSE(state.WasPausedAt(Now())); +} + +TEST_F(PausableStateTest, + WasPausedAtTrueWhenMultiplePauseResumeAtSameTimeAndThenPause) { + PausableState state(GetClock()); + + state.Pause(); + state.Resume(); + state.Pause(); + state.Resume(); + state.Pause(); + state.Resume(); + state.Pause(); + EXPECT_TRUE(state.WasPausedAt(Now())); +} + +TEST_F(PausableStateTest, WasPausedAtFalseBeforeFirstPause) { + PausableState state(GetClock()); + + Timestamp test_time = Now(); + AdvanceTime(TimeDelta::Seconds(1)); + state.Pause(); + AdvanceTime(TimeDelta::Seconds(1)); + state.Resume(); + AdvanceTime(TimeDelta::Seconds(1)); + state.Pause(); + + EXPECT_FALSE(state.WasPausedAt(test_time)); +} + +TEST_F(PausableStateTest, WasPausedAtTrueAfterPauseBeforeResume) { + PausableState state(GetClock()); + + state.Pause(); + AdvanceTime(TimeDelta::Seconds(1)); + Timestamp test_time = Now(); + AdvanceTime(TimeDelta::Seconds(1)); + state.Resume(); + AdvanceTime(TimeDelta::Seconds(1)); + state.Pause(); + AdvanceTime(TimeDelta::Seconds(1)); + state.Resume(); + + EXPECT_TRUE(state.WasPausedAt(test_time)); +} + +TEST_F(PausableStateTest, WasPausedAtFalseAfterResumeBeforePause) { + PausableState state(GetClock()); + + state.Pause(); + AdvanceTime(TimeDelta::Seconds(1)); + state.Resume(); + AdvanceTime(TimeDelta::Seconds(1)); + Timestamp test_time = Now(); + AdvanceTime(TimeDelta::Seconds(1)); + state.Pause(); + AdvanceTime(TimeDelta::Seconds(1)); + state.Resume(); + + EXPECT_FALSE(state.WasPausedAt(test_time)); +} + +TEST_F(PausableStateTest, WasPausedAtTrueAtPauseBeforeResume) { + PausableState state(GetClock()); + + state.Pause(); + Timestamp test_time = Now(); + AdvanceTime(TimeDelta::Seconds(1)); + state.Resume(); + AdvanceTime(TimeDelta::Seconds(1)); + state.Pause(); + AdvanceTime(TimeDelta::Seconds(1)); + state.Resume(); + + EXPECT_TRUE(state.WasPausedAt(test_time)); +} + +TEST_F(PausableStateTest, WasPausedAtFalseAfterPauseAtResume) { + PausableState state(GetClock()); + + state.Pause(); + AdvanceTime(TimeDelta::Seconds(1)); + Timestamp test_time = Now(); + state.Resume(); + AdvanceTime(TimeDelta::Seconds(1)); + state.Pause(); + AdvanceTime(TimeDelta::Seconds(1)); + state.Resume(); + + EXPECT_FALSE(state.WasPausedAt(test_time)); +} + +TEST_F(PausableStateTest, WasPausedAtTrueAfterPause) { + PausableState state(GetClock()); + + state.Pause(); + AdvanceTime(TimeDelta::Seconds(1)); + Timestamp test_time = Now(); + + EXPECT_TRUE(state.WasPausedAt(test_time)); +} + +TEST_F(PausableStateTest, WasPausedAtFalseAfterResume) { + PausableState state(GetClock()); + + state.Pause(); + AdvanceTime(TimeDelta::Seconds(1)); + state.Resume(); + AdvanceTime(TimeDelta::Seconds(1)); + Timestamp test_time = Now(); + + EXPECT_FALSE(state.WasPausedAt(test_time)); +} + +TEST_F(PausableStateTest, WasResumedAfterFalseBeforeFirstPause) { + PausableState state(GetClock()); + + Timestamp test_time = Now(); + AdvanceTime(TimeDelta::Seconds(1)); + state.Pause(); + AdvanceTime(TimeDelta::Seconds(1)); + state.Resume(); + AdvanceTime(TimeDelta::Seconds(1)); + state.Pause(); + + EXPECT_FALSE(state.WasResumedAfter(test_time)); +} + +TEST_F(PausableStateTest, WasResumedAfterTrueAfterPauseBeforeResume) { + PausableState state(GetClock()); + + state.Pause(); + AdvanceTime(TimeDelta::Seconds(1)); + Timestamp test_time = Now(); + AdvanceTime(TimeDelta::Seconds(1)); + state.Resume(); + AdvanceTime(TimeDelta::Seconds(1)); + state.Pause(); + AdvanceTime(TimeDelta::Seconds(1)); + state.Resume(); + + EXPECT_TRUE(state.WasResumedAfter(test_time)); +} + +TEST_F(PausableStateTest, WasResumedAfterFalseAfterResumeBeforePause) { + PausableState state(GetClock()); + + state.Pause(); + AdvanceTime(TimeDelta::Seconds(1)); + state.Resume(); + AdvanceTime(TimeDelta::Seconds(1)); + Timestamp test_time = Now(); + AdvanceTime(TimeDelta::Seconds(1)); + state.Pause(); + AdvanceTime(TimeDelta::Seconds(1)); + state.Resume(); + + EXPECT_FALSE(state.WasResumedAfter(test_time)); +} + +TEST_F(PausableStateTest, WasResumedAfterTrueAtPauseBeforeResume) { + PausableState state(GetClock()); + + state.Pause(); + Timestamp test_time = Now(); + AdvanceTime(TimeDelta::Seconds(1)); + state.Resume(); + AdvanceTime(TimeDelta::Seconds(1)); + state.Pause(); + AdvanceTime(TimeDelta::Seconds(1)); + state.Resume(); + + EXPECT_TRUE(state.WasResumedAfter(test_time)); +} + +TEST_F(PausableStateTest, WasResumedAfterFalseAfterPauseAtResume) { + PausableState state(GetClock()); + + state.Pause(); + AdvanceTime(TimeDelta::Seconds(1)); + Timestamp test_time = Now(); + state.Resume(); + AdvanceTime(TimeDelta::Seconds(1)); + state.Pause(); + AdvanceTime(TimeDelta::Seconds(1)); + state.Resume(); + + EXPECT_FALSE(state.WasResumedAfter(test_time)); +} + +TEST_F(PausableStateTest, WasResumedAfterFalseAfterPause) { + PausableState state(GetClock()); + + state.Pause(); + AdvanceTime(TimeDelta::Seconds(1)); + Timestamp test_time = Now(); + + EXPECT_FALSE(state.WasResumedAfter(test_time)); +} + +TEST_F(PausableStateTest, WasResumedAfterFalseAfterResume) { + PausableState state(GetClock()); + + state.Pause(); + AdvanceTime(TimeDelta::Seconds(1)); + state.Resume(); + AdvanceTime(TimeDelta::Seconds(1)); + Timestamp test_time = Now(); + + EXPECT_FALSE(state.WasResumedAfter(test_time)); +} + +TEST_F(PausableStateTest, GetActiveDurationFromWithoutPausesReturnAllTime) { + PausableState state(GetClock()); + + Timestamp time_from = Now(); + AdvanceTime(TimeDelta::Seconds(5)); + + EXPECT_EQ(state.GetActiveDurationFrom(time_from), TimeDelta::Seconds(5)); +} + +TEST_F(PausableStateTest, GetActiveDurationFromRespectsPauses) { + PausableState state(GetClock()); + + Timestamp time_from = Now(); + + AdvanceTime(TimeDelta::Seconds(1)); + state.Pause(); + AdvanceTime(TimeDelta::Seconds(1)); + state.Resume(); + AdvanceTime(TimeDelta::Seconds(1)); + state.Pause(); + AdvanceTime(TimeDelta::Seconds(1)); + state.Resume(); + AdvanceTime(TimeDelta::Seconds(1)); + + EXPECT_EQ(state.GetActiveDurationFrom(time_from), TimeDelta::Seconds(3)); +} + +TEST_F(PausableStateTest, GetActiveDurationFromMiddleOfPauseAccountOnlyActive) { + PausableState state(GetClock()); + + AdvanceTime(TimeDelta::Seconds(1)); + state.Pause(); + AdvanceTime(TimeDelta::Seconds(1)); + Timestamp time_from = Now(); + AdvanceTime(TimeDelta::Seconds(1)); + state.Resume(); + AdvanceTime(TimeDelta::Seconds(1)); + state.Pause(); + AdvanceTime(TimeDelta::Seconds(1)); + state.Resume(); + AdvanceTime(TimeDelta::Seconds(1)); + + EXPECT_EQ(state.GetActiveDurationFrom(time_from), TimeDelta::Seconds(2)); +} + +TEST_F(PausableStateTest, GetActiveDurationFromMiddleOfActiveAccountAllActive) { + PausableState state(GetClock()); + + AdvanceTime(TimeDelta::Seconds(1)); + state.Pause(); + AdvanceTime(TimeDelta::Seconds(1)); + state.Resume(); + AdvanceTime(TimeDelta::Seconds(1)); + Timestamp time_from = Now(); + AdvanceTime(TimeDelta::Seconds(1)); + state.Pause(); + AdvanceTime(TimeDelta::Seconds(1)); + state.Resume(); + AdvanceTime(TimeDelta::Seconds(1)); + + EXPECT_EQ(state.GetActiveDurationFrom(time_from), TimeDelta::Seconds(2)); +} + +TEST_F(PausableStateTest, GetActiveDurationFromWhenPauseReturnsZero) { + PausableState state(GetClock()); + + AdvanceTime(TimeDelta::Seconds(1)); + state.Pause(); + AdvanceTime(TimeDelta::Seconds(1)); + Timestamp time_from = Now(); + + EXPECT_EQ(state.GetActiveDurationFrom(time_from), TimeDelta::Zero()); +} + +TEST_F(PausableStateTest, GetActiveDurationFromWhenActiveReturnsAllTime) { + PausableState state(GetClock()); + + AdvanceTime(TimeDelta::Seconds(1)); + state.Pause(); + AdvanceTime(TimeDelta::Seconds(1)); + state.Resume(); + AdvanceTime(TimeDelta::Seconds(1)); + Timestamp time_from = Now(); + AdvanceTime(TimeDelta::Seconds(1)); + + EXPECT_EQ(state.GetActiveDurationFrom(time_from), TimeDelta::Seconds(1)); +} + +} // namespace +} // namespace webrtc |