| Index: media/renderers/renderer_impl_unittest.cc
|
| diff --git a/media/renderers/renderer_impl_unittest.cc b/media/renderers/renderer_impl_unittest.cc
|
| index df4c8cca40684fb16ac2a2982101bd4f75b7c985..e4396580aa91e71d4e01a5f2c3d627be2e73e4ec 100644
|
| --- a/media/renderers/renderer_impl_unittest.cc
|
| +++ b/media/renderers/renderer_impl_unittest.cc
|
| @@ -564,4 +564,42 @@ TEST_F(RendererImplTest, VideoAndAudioUnderflow) {
|
| base::RunLoop().RunUntilIdle();
|
| }
|
|
|
| +TEST_F(RendererImplTest, VideoUnderflowWithAudioFlush) {
|
| + InitializeWithAudioAndVideo();
|
| + Play();
|
| +
|
| + // Set a massive threshold such that it shouldn't fire within this test.
|
| + renderer_impl_->set_video_underflow_threshold_for_testing(
|
| + base::TimeDelta::FromSeconds(100));
|
| +
|
| + // Simulate the cases where audio underflows and then video underflows.
|
| + EXPECT_CALL(time_source_, StopTicking());
|
| + audio_buffering_state_cb_.Run(BUFFERING_HAVE_NOTHING);
|
| + video_buffering_state_cb_.Run(BUFFERING_HAVE_NOTHING);
|
| + Mock::VerifyAndClearExpectations(&time_source_);
|
| +
|
| + // Flush the audio and video renderers, both think they're in an underflow
|
| + // state, but if the video renderer underflow was deferred, RendererImpl would
|
| + // think it still has enough data.
|
| + EXPECT_CALL(*audio_renderer_, Flush(_)).WillOnce(RunClosure<0>());
|
| + EXPECT_CALL(*video_renderer_, Flush(_)).WillOnce(RunClosure<0>());
|
| + EXPECT_CALL(callbacks_, OnFlushed());
|
| + renderer_impl_->Flush(
|
| + base::Bind(&CallbackHelper::OnFlushed, base::Unretained(&callbacks_)));
|
| + base::RunLoop().RunUntilIdle();
|
| +
|
| + // Start playback after the flush, but never return BUFFERING_HAVE_ENOUGH from
|
| + // the video renderer (which simulates spool up time for the video renderer).
|
| + const base::TimeDelta kStartTime;
|
| + EXPECT_CALL(time_source_, SetMediaTime(kStartTime));
|
| + EXPECT_CALL(*audio_renderer_, StartPlaying())
|
| + .WillOnce(
|
| + SetBufferingState(&audio_buffering_state_cb_, BUFFERING_HAVE_ENOUGH));
|
| + EXPECT_CALL(*video_renderer_, StartPlayingFrom(kStartTime));
|
| + renderer_impl_->StartPlayingFrom(kStartTime);
|
| +
|
| + // Nothing else should primed on the message loop.
|
| + base::RunLoop().RunUntilIdle();
|
| +}
|
| +
|
| } // namespace media
|
|
|