Index: media/filters/audio_clock_unittest.cc |
diff --git a/media/filters/audio_clock_unittest.cc b/media/filters/audio_clock_unittest.cc |
index 3fe437ee24c6f42829281a47ec698bfa3e74818f..2144bb0d67037504d93ee59d04a0b85bcd936b55 100644 |
--- a/media/filters/audio_clock_unittest.cc |
+++ b/media/filters/audio_clock_unittest.cc |
@@ -330,4 +330,30 @@ TEST_F(AudioClockTest, SupportsYearsWorthOfAudioData) { |
EXPECT_EQ((huge * 2).InDays(), ContiguousAudioDataBufferedInDays()); |
} |
+TEST_F(AudioClockTest, CompensateForSuspendedWrites) { |
+ // Buffer 6 seconds of delay and 1 second of audio data. |
+ WroteAudio(10, 10, 60, 1.0); |
+ |
+ // Media timestamp zero has to wait for silence to pass. |
+ const int kBaseTimeMs = 6000; |
+ EXPECT_EQ(kBaseTimeMs, TimeUntilPlaybackInMilliseconds(0)); |
+ |
+ // Elapsing frames less than we have buffered should do nothing. |
+ const int kDelayFrames = 2; |
+ for (int i = 1000; i <= kBaseTimeMs; i += 1000) { |
+ clock_.CompensateForSuspendedWrites(base::TimeDelta::FromMilliseconds(i), |
+ kDelayFrames); |
+ EXPECT_EQ(kBaseTimeMs - (i - 1000), TimeUntilPlaybackInMilliseconds(0)); |
+ |
+ // Write silence to simulate maintaining a 7s output buffer. |
+ WroteAudio(0, 10, 60, 1.0); |
+ } |
+ |
+ // Exhausting all frames should advance timestamps and prime the buffer with |
+ // our delay frames value. |
+ clock_.CompensateForSuspendedWrites(base::TimeDelta::FromMilliseconds(7000), |
+ kDelayFrames); |
+ EXPECT_EQ(kDelayFrames * 100, TimeUntilPlaybackInMilliseconds(1000)); |
+} |
+ |
} // namespace media |