| Index: media/renderers/renderer_impl_unittest.cc
|
| diff --git a/media/renderers/renderer_impl_unittest.cc b/media/renderers/renderer_impl_unittest.cc
|
| index e513e69b59dc1cd60c649d7f3d29b86bbfdce493..6075b8f2f99400cefc13910a74f0896f86d97a5a 100644
|
| --- a/media/renderers/renderer_impl_unittest.cc
|
| +++ b/media/renderers/renderer_impl_unittest.cc
|
| @@ -136,6 +136,25 @@ class RendererImplTest : public ::testing::Test {
|
| base::Bind(&CallbackHelper::OnInitialize,
|
| base::Unretained(&callbacks_)));
|
| base::RunLoop().RunUntilIdle();
|
| +
|
| + if (start_status == PIPELINE_OK && audio_stream_) {
|
| + ON_CALL(*audio_renderer_, Flush(_))
|
| + .WillByDefault(DoAll(SetBufferingState(&audio_renderer_client_,
|
| + BUFFERING_HAVE_NOTHING),
|
| + RunClosure<0>()));
|
| + ON_CALL(*audio_renderer_, StartPlaying())
|
| + .WillByDefault(SetBufferingState(&audio_renderer_client_,
|
| + BUFFERING_HAVE_ENOUGH));
|
| + }
|
| + if (start_status == PIPELINE_OK && video_stream_) {
|
| + ON_CALL(*video_renderer_, Flush(_))
|
| + .WillByDefault(DoAll(SetBufferingState(&video_renderer_client_,
|
| + BUFFERING_HAVE_NOTHING),
|
| + RunClosure<0>()));
|
| + ON_CALL(*video_renderer_, StartPlayingFrom(_))
|
| + .WillByDefault(SetBufferingState(&video_renderer_client_,
|
| + BUFFERING_HAVE_ENOUGH));
|
| + }
|
| }
|
|
|
| void CreateAudioStream() {
|
| @@ -215,15 +234,11 @@ class RendererImplTest : public ::testing::Test {
|
| EXPECT_CALL(time_source_, StartTicking());
|
|
|
| if (audio_stream_) {
|
| - EXPECT_CALL(*audio_renderer_, StartPlaying())
|
| - .WillOnce(SetBufferingState(&audio_renderer_client_,
|
| - BUFFERING_HAVE_ENOUGH));
|
| + EXPECT_CALL(*audio_renderer_, StartPlaying());
|
| }
|
|
|
| if (video_stream_) {
|
| - EXPECT_CALL(*video_renderer_, StartPlayingFrom(start_time))
|
| - .WillOnce(SetBufferingState(&video_renderer_client_,
|
| - BUFFERING_HAVE_ENOUGH));
|
| + EXPECT_CALL(*video_renderer_, StartPlayingFrom(start_time));
|
| }
|
|
|
| renderer_impl_->StartPlayingFrom(start_time);
|
| @@ -231,19 +246,11 @@ class RendererImplTest : public ::testing::Test {
|
| }
|
|
|
| void SetFlushExpectationsForAVRenderers() {
|
| - if (audio_stream_) {
|
| - EXPECT_CALL(*audio_renderer_, Flush(_))
|
| - .WillOnce(DoAll(SetBufferingState(&audio_renderer_client_,
|
| - BUFFERING_HAVE_NOTHING),
|
| - RunClosure<0>()));
|
| - }
|
| + if (audio_stream_)
|
| + EXPECT_CALL(*audio_renderer_, Flush(_));
|
|
|
| - if (video_stream_) {
|
| - EXPECT_CALL(*video_renderer_, Flush(_))
|
| - .WillOnce(DoAll(SetBufferingState(&video_renderer_client_,
|
| - BUFFERING_HAVE_NOTHING),
|
| - RunClosure<0>()));
|
| - }
|
| + if (video_stream_)
|
| + EXPECT_CALL(*video_renderer_, Flush(_));
|
| }
|
|
|
| void Flush(bool underflowed) {
|
| @@ -751,10 +758,10 @@ TEST_F(RendererImplTest, VideoUnderflowWithAudioFlush) {
|
| // 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_renderer_client_, BUFFERING_HAVE_ENOUGH));
|
| + EXPECT_CALL(time_source_, StartTicking());
|
| + EXPECT_CALL(*audio_renderer_, StartPlaying());
|
| EXPECT_CALL(*video_renderer_, StartPlayingFrom(kStartTime));
|
| + EXPECT_CALL(callbacks_, OnBufferingStateChange(BUFFERING_HAVE_ENOUGH));
|
| renderer_impl_->StartPlayingFrom(kStartTime);
|
|
|
| // Nothing else should primed on the message loop.
|
| @@ -772,25 +779,20 @@ TEST_F(RendererImplTest, StreamStatusNotificationHandling) {
|
| InitializeAndExpect(PIPELINE_OK);
|
| Play();
|
|
|
| + EXPECT_CALL(callbacks_, OnBufferingStateChange(BUFFERING_HAVE_ENOUGH));
|
| +
|
| // Verify that DemuxerStream status changes cause the corresponding
|
| // audio/video renderer to be flushed and restarted.
|
| EXPECT_CALL(time_source_, StopTicking());
|
| - EXPECT_CALL(*audio_renderer_, Flush(_)).WillOnce(RunClosure<0>());
|
| - EXPECT_CALL(*audio_renderer_, StartPlaying())
|
| - .Times(1)
|
| - .WillOnce(
|
| - SetBufferingState(&audio_renderer_client_, BUFFERING_HAVE_ENOUGH));
|
| + EXPECT_CALL(*audio_renderer_, Flush(_));
|
| + EXPECT_CALL(*audio_renderer_, StartPlaying());
|
| + EXPECT_CALL(time_source_, StartTicking());
|
| stream_status_change_cb.Run(audio_stream_.get(), false, base::TimeDelta());
|
|
|
| - EXPECT_CALL(*video_renderer_, Flush(_)).WillOnce(RunClosure<0>());
|
| - EXPECT_CALL(*video_renderer_, StartPlayingFrom(_))
|
| - .Times(1)
|
| - .WillOnce(DoAll(
|
| - SetBufferingState(&video_renderer_client_, BUFFERING_HAVE_ENOUGH),
|
| - PostQuitWhenIdle()));
|
| -
|
| + EXPECT_CALL(*video_renderer_, Flush(_));
|
| + EXPECT_CALL(*video_renderer_, StartPlayingFrom(_));
|
| stream_status_change_cb.Run(video_stream_.get(), false, base::TimeDelta());
|
| - base::RunLoop().Run();
|
| + base::RunLoop().RunUntilIdle();
|
| }
|
|
|
| // Stream status changes are handled asynchronously by the renderer and may take
|
| @@ -815,18 +817,8 @@ TEST_F(RendererImplTest, PostponedStreamStatusNotificationHandling) {
|
|
|
| EXPECT_CALL(time_source_, StopTicking()).Times(2);
|
| EXPECT_CALL(time_source_, StartTicking()).Times(2);
|
| - EXPECT_CALL(*audio_renderer_, Flush(_))
|
| - .Times(2)
|
| - .WillRepeatedly(DoAll(
|
| - SetBufferingState(&audio_renderer_client_, BUFFERING_HAVE_NOTHING),
|
| - WithArg<0>(PostCallback())));
|
| - EXPECT_CALL(*audio_renderer_, StartPlaying())
|
| - .Times(2)
|
| - .WillOnce(
|
| - SetBufferingState(&audio_renderer_client_, BUFFERING_HAVE_ENOUGH))
|
| - .WillOnce(DoAll(
|
| - SetBufferingState(&audio_renderer_client_, BUFFERING_HAVE_ENOUGH),
|
| - PostQuitWhenIdle()));
|
| + EXPECT_CALL(*audio_renderer_, Flush(_)).Times(2);
|
| + EXPECT_CALL(*audio_renderer_, StartPlaying()).Times(2);
|
| // The first stream status change will be processed immediately. Each status
|
| // change processing involves Flush + StartPlaying when the Flush is done. The
|
| // Flush operation is async in this case, so the second status change will be
|
| @@ -834,20 +826,10 @@ TEST_F(RendererImplTest, PostponedStreamStatusNotificationHandling) {
|
| // we must still get two pairs of Flush/StartPlaying calls eventually.
|
| stream_status_change_cb.Run(audio_stream_.get(), false, base::TimeDelta());
|
| stream_status_change_cb.Run(audio_stream_.get(), true, base::TimeDelta());
|
| - base::RunLoop().Run();
|
| + base::RunLoop().RunUntilIdle();
|
|
|
| - EXPECT_CALL(*video_renderer_, Flush(_))
|
| - .Times(2)
|
| - .WillRepeatedly(DoAll(
|
| - SetBufferingState(&video_renderer_client_, BUFFERING_HAVE_NOTHING),
|
| - WithArg<0>(PostCallback())));
|
| - EXPECT_CALL(*video_renderer_, StartPlayingFrom(base::TimeDelta()))
|
| - .Times(2)
|
| - .WillOnce(
|
| - SetBufferingState(&video_renderer_client_, BUFFERING_HAVE_ENOUGH))
|
| - .WillOnce(DoAll(
|
| - SetBufferingState(&video_renderer_client_, BUFFERING_HAVE_ENOUGH),
|
| - PostQuitWhenIdle()));
|
| + EXPECT_CALL(*video_renderer_, Flush(_)).Times(2);
|
| + EXPECT_CALL(*video_renderer_, StartPlayingFrom(base::TimeDelta())).Times(2);
|
| // The first stream status change will be processed immediately. Each status
|
| // change processing involves Flush + StartPlaying when the Flush is done. The
|
| // Flush operation is async in this case, so the second status change will be
|
| @@ -855,7 +837,7 @@ TEST_F(RendererImplTest, PostponedStreamStatusNotificationHandling) {
|
| // we must still get two pairs of Flush/StartPlaying calls eventually.
|
| stream_status_change_cb.Run(video_stream_.get(), false, base::TimeDelta());
|
| stream_status_change_cb.Run(video_stream_.get(), true, base::TimeDelta());
|
| - base::RunLoop().Run();
|
| + base::RunLoop().RunUntilIdle();
|
| }
|
|
|
| // Verify that a RendererImpl::Flush gets postponed until after stream status
|
| @@ -875,10 +857,7 @@ TEST_F(RendererImplTest, FlushDuringAudioReinit) {
|
| base::Closure audio_renderer_flush_cb;
|
| EXPECT_CALL(*audio_renderer_, Flush(_))
|
| .WillOnce(SaveArg<0>(&audio_renderer_flush_cb));
|
| - EXPECT_CALL(*audio_renderer_, StartPlaying())
|
| - .Times(1)
|
| - .WillOnce(
|
| - SetBufferingState(&audio_renderer_client_, BUFFERING_HAVE_ENOUGH));
|
| + EXPECT_CALL(*audio_renderer_, StartPlaying());
|
|
|
| // This should start flushing the audio renderer (due to audio stream status
|
| // change) and should populate the |audio_renderer_flush_cb|.
|
| @@ -919,10 +898,7 @@ TEST_F(RendererImplTest, FlushDuringVideoReinit) {
|
| base::Closure video_renderer_flush_cb;
|
| EXPECT_CALL(*video_renderer_, Flush(_))
|
| .WillOnce(SaveArg<0>(&video_renderer_flush_cb));
|
| - EXPECT_CALL(*video_renderer_, StartPlayingFrom(_))
|
| - .Times(1)
|
| - .WillOnce(
|
| - SetBufferingState(&video_renderer_client_, BUFFERING_HAVE_ENOUGH));
|
| + EXPECT_CALL(*video_renderer_, StartPlayingFrom(_));
|
|
|
| // This should start flushing the video renderer (due to video stream status
|
| // change) and should populate the |video_renderer_flush_cb|.
|
| @@ -967,10 +943,7 @@ TEST_F(RendererImplTest, AudioTrackSwitchDuringFlush) {
|
| Play();
|
|
|
| EXPECT_CALL(time_source_, StopTicking()).Times(testing::AnyNumber());
|
| - EXPECT_CALL(*video_renderer_, Flush(_))
|
| - .WillRepeatedly(DoAll(
|
| - SetBufferingState(&video_renderer_client_, BUFFERING_HAVE_NOTHING),
|
| - RunClosure<0>()));
|
| + EXPECT_CALL(*video_renderer_, Flush(_));
|
|
|
| // Initiate RendererImpl::Flush, but postpone its completion by not calling
|
| // audio renderer flush callback right away, i.e. pretending audio renderer
|
| @@ -1025,10 +998,7 @@ TEST_F(RendererImplTest, VideoTrackSwitchDuringFlush) {
|
|
|
| EXPECT_CALL(time_source_, StopTicking()).Times(testing::AnyNumber());
|
| EXPECT_CALL(*video_renderer_, OnTimeStopped()).Times(testing::AnyNumber());
|
| - EXPECT_CALL(*audio_renderer_, Flush(_))
|
| - .WillRepeatedly(DoAll(
|
| - SetBufferingState(&audio_renderer_client_, BUFFERING_HAVE_NOTHING),
|
| - RunClosure<0>()));
|
| + EXPECT_CALL(*audio_renderer_, Flush(_));
|
|
|
| // Initiate RendererImpl::Flush, but postpone its completion by not calling
|
| // video renderer flush callback right away, i.e. pretending video renderer
|
|
|