StreamSynchronizationTest: Replace class Time with SimulatedClock.

Remove unused constants and variables.

Bug: none
Change-Id: I7336bbe5bfecbaaf646c9704e4f75532629754d1
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/159944
Reviewed-by: Rasmus Brandt <brandtr@webrtc.org>
Commit-Queue: Åsa Persson <asapersson@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#29826}
diff --git a/video/stream_synchronization_unittest.cc b/video/stream_synchronization_unittest.cc
index cbd00e8..f9b885d 100644
--- a/video/stream_synchronization_unittest.cc
+++ b/video/stream_synchronization_unittest.cc
@@ -12,65 +12,24 @@
 
 #include <algorithm>
 
+#include "system_wrappers/include/clock.h"
 #include "system_wrappers/include/ntp_time.h"
 #include "test/gtest.h"
 
 namespace webrtc {
-
-// These correspond to the same constants defined in vie_sync_module.cc.
-enum { kMaxVideoDiffMs = 80 };
-enum { kMaxAudioDiffMs = 80 };
-enum { kMaxDelay = 1500 };
-
-// Test constants.
-enum { kDefaultAudioFrequency = 8000 };
-enum { kDefaultVideoFrequency = 90000 };
-const double kNtpFracPerMs = 4.294967296E6;
-static const int kSmoothingFilter = 4 * 2;
-
-class Time {
- public:
-  explicit Time(int64_t offset)
-      : kNtpJan1970(2208988800UL), time_now_ms_(offset) {}
-
-  NtpTime GetNowNtp() const {
-    uint32_t ntp_secs = time_now_ms_ / 1000 + kNtpJan1970;
-    int64_t remainder_ms = time_now_ms_ % 1000;
-    uint32_t ntp_frac = static_cast<uint32_t>(
-        static_cast<double>(remainder_ms) * kNtpFracPerMs + 0.5);
-    return NtpTime(ntp_secs, ntp_frac);
-  }
-
-  uint32_t GetNowRtp(int frequency, uint32_t offset) const {
-    return frequency * time_now_ms_ / 1000 + offset;
-  }
-
-  void IncreaseTimeMs(int64_t inc) { time_now_ms_ += inc; }
-
-  int64_t time_now_ms() const { return time_now_ms_; }
-
- private:
-  // January 1970, in NTP seconds.
-  const uint32_t kNtpJan1970;
-  int64_t time_now_ms_;
-};
+namespace {
+constexpr int kMaxAudioDiffMs = 80;  // From stream_synchronization.cc
+constexpr int kDefaultAudioFrequency = 8000;
+constexpr int kDefaultVideoFrequency = 90000;
+constexpr int kSmoothingFilter = 4 * 2;
+}  // namespace
 
 class StreamSynchronizationTest : public ::testing::Test {
+ public:
+  StreamSynchronizationTest()
+      : sync_(0, 0), clock_sender_(98765000), clock_receiver_(43210000) {}
+
  protected:
-  virtual void SetUp() {
-    sync_ = new StreamSynchronization(0, 0);
-    send_time_ = new Time(kSendTimeOffsetMs);
-    receive_time_ = new Time(kReceiveTimeOffsetMs);
-    audio_clock_drift_ = 1.0;
-    video_clock_drift_ = 1.0;
-  }
-
-  virtual void TearDown() {
-    delete sync_;
-    delete send_time_;
-    delete receive_time_;
-  }
-
   // Generates the necessary RTCP measurements and RTP timestamps and computes
   // the audio and video delays needed to get the two streams in sync.
   // |audio_delay_ms| and |video_delay_ms| are the number of milliseconds after
@@ -84,66 +43,64 @@
                       int* total_video_delay_ms) {
     int audio_frequency =
         static_cast<int>(kDefaultAudioFrequency * audio_clock_drift_ + 0.5);
-    int audio_offset = 0;
     int video_frequency =
         static_cast<int>(kDefaultVideoFrequency * video_clock_drift_ + 0.5);
+
+    // Generate NTP/RTP timestamp pair for both streams corresponding to RTCP.
     bool new_sr;
-    int video_offset = 0;
     StreamSynchronization::Measurements audio;
     StreamSynchronization::Measurements video;
-    // Generate NTP/RTP timestamp pair for both streams corresponding to RTCP.
-    NtpTime ntp_time = send_time_->GetNowNtp();
+    NtpTime ntp_time = clock_sender_.CurrentNtpTime();
     uint32_t rtp_timestamp =
-        send_time_->GetNowRtp(audio_frequency, audio_offset);
+        clock_sender_.CurrentTime().ms() * audio_frequency / 1000;
     EXPECT_TRUE(audio.rtp_to_ntp.UpdateMeasurements(
         ntp_time.seconds(), ntp_time.fractions(), rtp_timestamp, &new_sr));
-    send_time_->IncreaseTimeMs(100);
-    receive_time_->IncreaseTimeMs(100);
-    ntp_time = send_time_->GetNowNtp();
-    rtp_timestamp = send_time_->GetNowRtp(video_frequency, video_offset);
+    clock_sender_.AdvanceTimeMilliseconds(100);
+    clock_receiver_.AdvanceTimeMilliseconds(100);
+    ntp_time = clock_sender_.CurrentNtpTime();
+    rtp_timestamp = clock_sender_.CurrentTime().ms() * video_frequency / 1000;
     EXPECT_TRUE(video.rtp_to_ntp.UpdateMeasurements(
         ntp_time.seconds(), ntp_time.fractions(), rtp_timestamp, &new_sr));
-    send_time_->IncreaseTimeMs(900);
-    receive_time_->IncreaseTimeMs(900);
-    ntp_time = send_time_->GetNowNtp();
-    rtp_timestamp = send_time_->GetNowRtp(audio_frequency, audio_offset);
+    clock_sender_.AdvanceTimeMilliseconds(900);
+    clock_receiver_.AdvanceTimeMilliseconds(900);
+    ntp_time = clock_sender_.CurrentNtpTime();
+    rtp_timestamp = clock_sender_.CurrentTime().ms() * audio_frequency / 1000;
     EXPECT_TRUE(audio.rtp_to_ntp.UpdateMeasurements(
         ntp_time.seconds(), ntp_time.fractions(), rtp_timestamp, &new_sr));
-    send_time_->IncreaseTimeMs(100);
-    receive_time_->IncreaseTimeMs(100);
-    ntp_time = send_time_->GetNowNtp();
-    rtp_timestamp = send_time_->GetNowRtp(video_frequency, video_offset);
+    clock_sender_.AdvanceTimeMilliseconds(100);
+    clock_receiver_.AdvanceTimeMilliseconds(100);
+    ntp_time = clock_sender_.CurrentNtpTime();
+    rtp_timestamp = clock_sender_.CurrentTime().ms() * video_frequency / 1000;
     EXPECT_TRUE(video.rtp_to_ntp.UpdateMeasurements(
         ntp_time.seconds(), ntp_time.fractions(), rtp_timestamp, &new_sr));
-
-    send_time_->IncreaseTimeMs(900);
-    receive_time_->IncreaseTimeMs(900);
+    clock_sender_.AdvanceTimeMilliseconds(900);
+    clock_receiver_.AdvanceTimeMilliseconds(900);
 
     // Capture an audio and a video frame at the same time.
     audio.latest_timestamp =
-        send_time_->GetNowRtp(audio_frequency, audio_offset);
+        clock_sender_.CurrentTime().ms() * audio_frequency / 1000;
     video.latest_timestamp =
-        send_time_->GetNowRtp(video_frequency, video_offset);
+        clock_sender_.CurrentTime().ms() * video_frequency / 1000;
 
     if (audio_delay_ms > video_delay_ms) {
       // Audio later than video.
-      receive_time_->IncreaseTimeMs(video_delay_ms);
-      video.latest_receive_time_ms = receive_time_->time_now_ms();
-      receive_time_->IncreaseTimeMs(audio_delay_ms - video_delay_ms);
-      audio.latest_receive_time_ms = receive_time_->time_now_ms();
+      clock_receiver_.AdvanceTimeMilliseconds(video_delay_ms);
+      video.latest_receive_time_ms = clock_receiver_.CurrentTime().ms();
+      clock_receiver_.AdvanceTimeMilliseconds(audio_delay_ms - video_delay_ms);
+      audio.latest_receive_time_ms = clock_receiver_.CurrentTime().ms();
     } else {
       // Video later than audio.
-      receive_time_->IncreaseTimeMs(audio_delay_ms);
-      audio.latest_receive_time_ms = receive_time_->time_now_ms();
-      receive_time_->IncreaseTimeMs(video_delay_ms - audio_delay_ms);
-      video.latest_receive_time_ms = receive_time_->time_now_ms();
+      clock_receiver_.AdvanceTimeMilliseconds(audio_delay_ms);
+      audio.latest_receive_time_ms = clock_receiver_.CurrentTime().ms();
+      clock_receiver_.AdvanceTimeMilliseconds(video_delay_ms - audio_delay_ms);
+      video.latest_receive_time_ms = clock_receiver_.CurrentTime().ms();
     }
     int relative_delay_ms;
     StreamSynchronization::ComputeRelativeDelay(audio, video,
                                                 &relative_delay_ms);
     EXPECT_EQ(video_delay_ms - audio_delay_ms, relative_delay_ms);
-    return sync_->ComputeDelays(relative_delay_ms, current_audio_delay_ms,
-                                extra_audio_delay_ms, total_video_delay_ms);
+    return sync_.ComputeDelays(relative_delay_ms, current_audio_delay_ms,
+                               extra_audio_delay_ms, total_video_delay_ms);
   }
 
   // Simulate audio playback 300 ms after capture and video rendering 100 ms
@@ -170,9 +127,9 @@
     EXPECT_EQ(base_target_delay, extra_audio_delay_ms);
     current_audio_delay_ms = extra_audio_delay_ms;
 
-    send_time_->IncreaseTimeMs(1000);
-    receive_time_->IncreaseTimeMs(1000 -
-                                  std::max(audio_delay_ms, video_delay_ms));
+    clock_sender_.AdvanceTimeMilliseconds(1000);
+    clock_receiver_.AdvanceTimeMilliseconds(
+        1000 - std::max(audio_delay_ms, video_delay_ms));
     // Simulate base_target_delay minimum delay in the VCM.
     total_video_delay_ms = base_target_delay;
     EXPECT_TRUE(DelayedStreams(audio_delay_ms, video_delay_ms,
@@ -182,9 +139,9 @@
     EXPECT_EQ(base_target_delay, extra_audio_delay_ms);
     current_audio_delay_ms = extra_audio_delay_ms;
 
-    send_time_->IncreaseTimeMs(1000);
-    receive_time_->IncreaseTimeMs(1000 -
-                                  std::max(audio_delay_ms, video_delay_ms));
+    clock_sender_.AdvanceTimeMilliseconds(1000);
+    clock_receiver_.AdvanceTimeMilliseconds(
+        1000 - std::max(audio_delay_ms, video_delay_ms));
     // Simulate base_target_delay minimum delay in the VCM.
     total_video_delay_ms = base_target_delay;
     EXPECT_TRUE(DelayedStreams(audio_delay_ms, video_delay_ms,
@@ -195,9 +152,9 @@
 
     // Simulate that NetEQ introduces some audio delay.
     current_audio_delay_ms = base_target_delay + kNeteqDelayIncrease;
-    send_time_->IncreaseTimeMs(1000);
-    receive_time_->IncreaseTimeMs(1000 -
-                                  std::max(audio_delay_ms, video_delay_ms));
+    clock_sender_.AdvanceTimeMilliseconds(1000);
+    clock_receiver_.AdvanceTimeMilliseconds(
+        1000 - std::max(audio_delay_ms, video_delay_ms));
     // Simulate base_target_delay minimum delay in the VCM.
     total_video_delay_ms = base_target_delay;
     EXPECT_TRUE(DelayedStreams(audio_delay_ms, video_delay_ms,
@@ -211,9 +168,9 @@
 
     // Simulate that NetEQ reduces its delay.
     current_audio_delay_ms = base_target_delay + kNeteqDelayDecrease;
-    send_time_->IncreaseTimeMs(1000);
-    receive_time_->IncreaseTimeMs(1000 -
-                                  std::max(audio_delay_ms, video_delay_ms));
+    clock_sender_.AdvanceTimeMilliseconds(1000);
+    clock_receiver_.AdvanceTimeMilliseconds(
+        1000 - std::max(audio_delay_ms, video_delay_ms));
     // Simulate base_target_delay minimum delay in the VCM.
     total_video_delay_ms = base_target_delay;
     EXPECT_TRUE(DelayedStreams(audio_delay_ms, video_delay_ms,
@@ -244,8 +201,8 @@
     current_audio_delay_ms = extra_audio_delay_ms;
     int current_extra_delay_ms = extra_audio_delay_ms;
 
-    send_time_->IncreaseTimeMs(1000);
-    receive_time_->IncreaseTimeMs(800);
+    clock_sender_.AdvanceTimeMilliseconds(1000);
+    clock_receiver_.AdvanceTimeMilliseconds(800);
     EXPECT_TRUE(DelayedStreams(audio_delay_ms, video_delay_ms,
                                current_audio_delay_ms, &extra_audio_delay_ms,
                                &total_video_delay_ms));
@@ -260,8 +217,8 @@
     current_audio_delay_ms = extra_audio_delay_ms;
     current_extra_delay_ms = extra_audio_delay_ms;
 
-    send_time_->IncreaseTimeMs(1000);
-    receive_time_->IncreaseTimeMs(800);
+    clock_sender_.AdvanceTimeMilliseconds(1000);
+    clock_receiver_.AdvanceTimeMilliseconds(800);
     EXPECT_TRUE(DelayedStreams(audio_delay_ms, video_delay_ms,
                                current_audio_delay_ms, &extra_audio_delay_ms,
                                &total_video_delay_ms));
@@ -277,8 +234,8 @@
 
     // Simulate that NetEQ for some reason reduced the delay.
     current_audio_delay_ms = base_target_delay + 10;
-    send_time_->IncreaseTimeMs(1000);
-    receive_time_->IncreaseTimeMs(800);
+    clock_sender_.AdvanceTimeMilliseconds(1000);
+    clock_receiver_.AdvanceTimeMilliseconds(800);
     EXPECT_TRUE(DelayedStreams(audio_delay_ms, video_delay_ms,
                                current_audio_delay_ms, &extra_audio_delay_ms,
                                &total_video_delay_ms));
@@ -295,8 +252,8 @@
 
     // Simulate that NetEQ for some reason significantly increased the delay.
     current_audio_delay_ms = base_target_delay + 350;
-    send_time_->IncreaseTimeMs(1000);
-    receive_time_->IncreaseTimeMs(800);
+    clock_sender_.AdvanceTimeMilliseconds(1000);
+    clock_receiver_.AdvanceTimeMilliseconds(800);
     EXPECT_TRUE(DelayedStreams(audio_delay_ms, video_delay_ms,
                                current_audio_delay_ms, &extra_audio_delay_ms,
                                &total_video_delay_ms));
@@ -312,7 +269,7 @@
 
   int MaxAudioDelayIncrease(int current_audio_delay_ms, int delay_ms) {
     return std::min((delay_ms - current_audio_delay_ms) / kSmoothingFilter,
-                    static_cast<int>(kMaxAudioDiffMs));
+                    kMaxAudioDiffMs);
   }
 
   int MaxAudioDelayDecrease(int current_audio_delay_ms, int delay_ms) {
@@ -320,14 +277,11 @@
                     -kMaxAudioDiffMs);
   }
 
-  enum { kSendTimeOffsetMs = 98765 };
-  enum { kReceiveTimeOffsetMs = 43210 };
-
-  StreamSynchronization* sync_;
-  Time* send_time_;     // The simulated clock at the sender.
-  Time* receive_time_;  // The simulated clock at the receiver.
-  double audio_clock_drift_;
-  double video_clock_drift_;
+  StreamSynchronization sync_;
+  SimulatedClock clock_sender_;
+  SimulatedClock clock_receiver_;
+  double audio_clock_drift_ = 1.0;
+  double video_clock_drift_ = 1.0;
 };
 
 TEST_F(StreamSynchronizationTest, NoDelay) {
@@ -353,8 +307,8 @@
   // The video delay is not allowed to change more than this in 1 second.
   EXPECT_EQ(delay_ms / kSmoothingFilter, total_video_delay_ms);
 
-  send_time_->IncreaseTimeMs(1000);
-  receive_time_->IncreaseTimeMs(800);
+  clock_sender_.AdvanceTimeMilliseconds(1000);
+  clock_receiver_.AdvanceTimeMilliseconds(800);
   // Simulate 0 minimum delay in the VCM.
   total_video_delay_ms = 0;
   EXPECT_TRUE(DelayedStreams(delay_ms, 0, current_audio_delay_ms,
@@ -363,8 +317,8 @@
   // The video delay is not allowed to change more than this in 1 second.
   EXPECT_EQ(2 * delay_ms / kSmoothingFilter, total_video_delay_ms);
 
-  send_time_->IncreaseTimeMs(1000);
-  receive_time_->IncreaseTimeMs(800);
+  clock_sender_.AdvanceTimeMilliseconds(1000);
+  clock_receiver_.AdvanceTimeMilliseconds(800);
   // Simulate 0 minimum delay in the VCM.
   total_video_delay_ms = 0;
   EXPECT_TRUE(DelayedStreams(delay_ms, 0, current_audio_delay_ms,
@@ -387,8 +341,8 @@
   current_audio_delay_ms = extra_audio_delay_ms;
   int current_extra_delay_ms = extra_audio_delay_ms;
 
-  send_time_->IncreaseTimeMs(1000);
-  receive_time_->IncreaseTimeMs(800);
+  clock_sender_.AdvanceTimeMilliseconds(1000);
+  clock_receiver_.AdvanceTimeMilliseconds(800);
   EXPECT_TRUE(DelayedStreams(0, delay_ms, current_audio_delay_ms,
                              &extra_audio_delay_ms, &total_video_delay_ms));
   EXPECT_EQ(0, total_video_delay_ms);
@@ -400,8 +354,8 @@
   current_audio_delay_ms = extra_audio_delay_ms;
   current_extra_delay_ms = extra_audio_delay_ms;
 
-  send_time_->IncreaseTimeMs(1000);
-  receive_time_->IncreaseTimeMs(800);
+  clock_sender_.AdvanceTimeMilliseconds(1000);
+  clock_receiver_.AdvanceTimeMilliseconds(800);
   EXPECT_TRUE(DelayedStreams(0, delay_ms, current_audio_delay_ms,
                              &extra_audio_delay_ms, &total_video_delay_ms));
   EXPECT_EQ(0, total_video_delay_ms);
@@ -414,8 +368,8 @@
 
   // Simulate that NetEQ for some reason reduced the delay.
   current_audio_delay_ms = 10;
-  send_time_->IncreaseTimeMs(1000);
-  receive_time_->IncreaseTimeMs(800);
+  clock_sender_.AdvanceTimeMilliseconds(1000);
+  clock_receiver_.AdvanceTimeMilliseconds(800);
   EXPECT_TRUE(DelayedStreams(0, delay_ms, current_audio_delay_ms,
                              &extra_audio_delay_ms, &total_video_delay_ms));
   EXPECT_EQ(0, total_video_delay_ms);
@@ -429,8 +383,8 @@
 
   // Simulate that NetEQ for some reason significantly increased the delay.
   current_audio_delay_ms = 350;
-  send_time_->IncreaseTimeMs(1000);
-  receive_time_->IncreaseTimeMs(800);
+  clock_sender_.AdvanceTimeMilliseconds(1000);
+  clock_receiver_.AdvanceTimeMilliseconds(800);
   EXPECT_TRUE(DelayedStreams(0, delay_ms, current_audio_delay_ms,
                              &extra_audio_delay_ms, &total_video_delay_ms));
   EXPECT_EQ(0, total_video_delay_ms);
@@ -474,7 +428,7 @@
   int current_audio_delay_ms = 2000;
   int extra_audio_delay_ms = 0;
   int total_video_delay_ms = base_target_delay_ms;
-  sync_->SetTargetBufferingDelay(base_target_delay_ms);
+  sync_.SetTargetBufferingDelay(base_target_delay_ms);
   // We are in sync don't change.
   EXPECT_FALSE(DelayedStreams(base_target_delay_ms, base_target_delay_ms,
                               current_audio_delay_ms, &extra_audio_delay_ms,
@@ -483,7 +437,7 @@
   base_target_delay_ms = 2000;
   current_audio_delay_ms = base_target_delay_ms;
   total_video_delay_ms = base_target_delay_ms;
-  sync_->SetTargetBufferingDelay(base_target_delay_ms);
+  sync_.SetTargetBufferingDelay(base_target_delay_ms);
   // We are in sync don't change.
   EXPECT_FALSE(DelayedStreams(base_target_delay_ms, base_target_delay_ms,
                               current_audio_delay_ms, &extra_audio_delay_ms,
@@ -493,7 +447,7 @@
   base_target_delay_ms = 5000;
   current_audio_delay_ms = base_target_delay_ms;
   total_video_delay_ms = base_target_delay_ms;
-  sync_->SetTargetBufferingDelay(base_target_delay_ms);
+  sync_.SetTargetBufferingDelay(base_target_delay_ms);
   // We are in sync don't change.
   EXPECT_FALSE(DelayedStreams(base_target_delay_ms, base_target_delay_ms,
                               current_audio_delay_ms, &extra_audio_delay_ms,
@@ -502,27 +456,27 @@
 
 TEST_F(StreamSynchronizationTest, BothDelayedAudioLaterWithBaseDelay) {
   int base_target_delay_ms = 3000;
-  sync_->SetTargetBufferingDelay(base_target_delay_ms);
+  sync_.SetTargetBufferingDelay(base_target_delay_ms);
   BothDelayedAudioLaterTest(base_target_delay_ms);
 }
 
 TEST_F(StreamSynchronizationTest, BothDelayedAudioClockDriftWithBaseDelay) {
   int base_target_delay_ms = 3000;
-  sync_->SetTargetBufferingDelay(base_target_delay_ms);
+  sync_.SetTargetBufferingDelay(base_target_delay_ms);
   audio_clock_drift_ = 1.05;
   BothDelayedAudioLaterTest(base_target_delay_ms);
 }
 
 TEST_F(StreamSynchronizationTest, BothDelayedVideoClockDriftWithBaseDelay) {
   int base_target_delay_ms = 3000;
-  sync_->SetTargetBufferingDelay(base_target_delay_ms);
+  sync_.SetTargetBufferingDelay(base_target_delay_ms);
   video_clock_drift_ = 1.05;
   BothDelayedAudioLaterTest(base_target_delay_ms);
 }
 
 TEST_F(StreamSynchronizationTest, BothDelayedVideoLaterWithBaseDelay) {
   int base_target_delay_ms = 2000;
-  sync_->SetTargetBufferingDelay(base_target_delay_ms);
+  sync_.SetTargetBufferingDelay(base_target_delay_ms);
   BothDelayedVideoLaterTest(base_target_delay_ms);
 }
 
@@ -530,7 +484,7 @@
        BothDelayedVideoLaterAudioClockDriftWithBaseDelay) {
   int base_target_delay_ms = 2000;
   audio_clock_drift_ = 1.05;
-  sync_->SetTargetBufferingDelay(base_target_delay_ms);
+  sync_.SetTargetBufferingDelay(base_target_delay_ms);
   BothDelayedVideoLaterTest(base_target_delay_ms);
 }
 
@@ -538,7 +492,7 @@
        BothDelayedVideoLaterVideoClockDriftWithBaseDelay) {
   int base_target_delay_ms = 2000;
   video_clock_drift_ = 1.05;
-  sync_->SetTargetBufferingDelay(base_target_delay_ms);
+  sync_.SetTargetBufferingDelay(base_target_delay_ms);
   BothDelayedVideoLaterTest(base_target_delay_ms);
 }