Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(616)

Unified Diff: media/renderers/renderer_impl_unittest.cc

Issue 1955843002: Move Renderer permanent callbacks into RendererClient interface. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: addressed comments Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « media/renderers/renderer_impl.cc ('k') | media/renderers/video_renderer_impl.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: media/renderers/renderer_impl_unittest.cc
diff --git a/media/renderers/renderer_impl_unittest.cc b/media/renderers/renderer_impl_unittest.cc
index 38748577e8ea97f2fd58e55454751c2bb3d13410..9c156dd026713a6dbd936d357e89064e408660d2 100644
--- a/media/renderers/renderer_impl_unittest.cc
+++ b/media/renderers/renderer_impl_unittest.cc
@@ -30,30 +30,26 @@ namespace media {
const int64_t kStartPlayingTimeInMs = 100;
-ACTION_P2(SetBufferingState, cb, buffering_state) {
- cb->Run(buffering_state);
+ACTION_P2(SetBufferingState, renderer_client, buffering_state) {
+ (*renderer_client)->OnBufferingStateChange(buffering_state);
}
-ACTION_P2(AudioError, cb, error) {
- cb->Run(error);
+ACTION_P2(SetError, renderer_client, error) {
+ (*renderer_client)->OnError(error);
}
class RendererImplTest : public ::testing::Test {
public:
// Used for setting expectations on pipeline callbacks. Using a StrictMock
// also lets us test for missing callbacks.
- class CallbackHelper {
+ class CallbackHelper : public MockRendererClient {
public:
CallbackHelper() {}
virtual ~CallbackHelper() {}
+ // Completion callbacks.
MOCK_METHOD1(OnInitialize, void(PipelineStatus));
MOCK_METHOD0(OnFlushed, void());
- MOCK_METHOD0(OnEnded, void());
- MOCK_METHOD1(OnError, void(PipelineStatus));
- MOCK_METHOD1(OnUpdateStatistics, void(const PipelineStatistics&));
- MOCK_METHOD1(OnBufferingStateChange, void(BufferingState));
- MOCK_METHOD0(OnWaitingForDecryptionKey, void());
MOCK_METHOD1(OnCdmAttached, void(bool));
private:
@@ -69,6 +65,8 @@ class RendererImplTest : public ::testing::Test {
std::unique_ptr<AudioRenderer>(audio_renderer_),
std::unique_ptr<VideoRenderer>(video_renderer_))),
cdm_context_(new StrictMock<MockCdmContext>()),
+ video_renderer_client_(nullptr),
+ audio_renderer_client_(nullptr),
initialization_status_(PIPELINE_OK) {
// SetDemuxerExpectations() adds overriding expectations for expected
// non-NULL streams.
@@ -96,19 +94,16 @@ class RendererImplTest : public ::testing::Test {
// Sets up expectations to allow the audio renderer to initialize.
void SetAudioRendererInitializeExpectations(PipelineStatus status) {
- EXPECT_CALL(*audio_renderer_,
- Initialize(audio_stream_.get(), _, _, _, _, _, _, _))
- .WillOnce(DoAll(SaveArg<4>(&audio_buffering_state_cb_),
- SaveArg<5>(&audio_ended_cb_),
- SaveArg<6>(&audio_error_cb_), RunCallback<1>(status)));
+ EXPECT_CALL(*audio_renderer_, Initialize(audio_stream_.get(), _, _, _))
+ .WillOnce(
+ DoAll(SaveArg<2>(&audio_renderer_client_), RunCallback<3>(status)));
}
// Sets up expectations to allow the video renderer to initialize.
void SetVideoRendererInitializeExpectations(PipelineStatus status) {
- EXPECT_CALL(*video_renderer_,
- Initialize(video_stream_.get(), _, _, _, _, _, _, _, _))
- .WillOnce(DoAll(SaveArg<4>(&video_buffering_state_cb_),
- SaveArg<5>(&video_ended_cb_), RunCallback<1>(status)));
+ EXPECT_CALL(*video_renderer_, Initialize(video_stream_.get(), _, _, _, _))
+ .WillOnce(
+ DoAll(SaveArg<2>(&video_renderer_client_), RunCallback<4>(status)));
}
void InitializeAndExpect(PipelineStatus start_status) {
@@ -123,18 +118,9 @@ class RendererImplTest : public ::testing::Test {
renderer_impl_->set_time_source_for_testing(&time_source_);
}
- renderer_impl_->Initialize(
- demuxer_.get(),
- base::Bind(&CallbackHelper::OnInitialize,
- base::Unretained(&callbacks_)),
- base::Bind(&CallbackHelper::OnUpdateStatistics,
- base::Unretained(&callbacks_)),
- base::Bind(&CallbackHelper::OnBufferingStateChange,
- base::Unretained(&callbacks_)),
- base::Bind(&CallbackHelper::OnEnded, base::Unretained(&callbacks_)),
- base::Bind(&CallbackHelper::OnError, base::Unretained(&callbacks_)),
- base::Bind(&CallbackHelper::OnWaitingForDecryptionKey,
- base::Unretained(&callbacks_)));
+ renderer_impl_->Initialize(demuxer_.get(), &callbacks_,
+ base::Bind(&CallbackHelper::OnInitialize,
+ base::Unretained(&callbacks_)));
base::RunLoop().RunUntilIdle();
}
@@ -192,13 +178,13 @@ class RendererImplTest : public ::testing::Test {
if (audio_stream_) {
EXPECT_CALL(*audio_renderer_, StartPlaying())
- .WillOnce(SetBufferingState(&audio_buffering_state_cb_,
+ .WillOnce(SetBufferingState(&audio_renderer_client_,
BUFFERING_HAVE_ENOUGH));
}
if (video_stream_) {
EXPECT_CALL(*video_renderer_, StartPlayingFrom(start_time))
- .WillOnce(SetBufferingState(&video_buffering_state_cb_,
+ .WillOnce(SetBufferingState(&video_renderer_client_,
BUFFERING_HAVE_ENOUGH));
}
@@ -212,14 +198,14 @@ class RendererImplTest : public ::testing::Test {
if (audio_stream_) {
EXPECT_CALL(*audio_renderer_, Flush(_))
- .WillOnce(DoAll(SetBufferingState(&audio_buffering_state_cb_,
+ .WillOnce(DoAll(SetBufferingState(&audio_renderer_client_,
BUFFERING_HAVE_NOTHING),
RunClosure<0>()));
}
if (video_stream_) {
EXPECT_CALL(*video_renderer_, Flush(_))
- .WillOnce(DoAll(SetBufferingState(&video_buffering_state_cb_,
+ .WillOnce(DoAll(SetBufferingState(&video_renderer_client_,
BUFFERING_HAVE_NOTHING),
RunClosure<0>()));
}
@@ -282,11 +268,8 @@ class RendererImplTest : public ::testing::Test {
std::unique_ptr<StrictMock<MockDemuxerStream>> audio_stream_;
std::unique_ptr<StrictMock<MockDemuxerStream>> video_stream_;
MockDemuxerStreamVector streams_;
- BufferingStateCB audio_buffering_state_cb_;
- BufferingStateCB video_buffering_state_cb_;
- base::Closure audio_ended_cb_;
- base::Closure video_ended_cb_;
- PipelineStatusCB audio_error_cb_;
+ RendererClient* video_renderer_client_;
+ RendererClient* audio_renderer_client_;
VideoDecoderConfig video_decoder_config_;
PipelineStatus initialization_status_;
@@ -303,8 +286,7 @@ TEST_F(RendererImplTest, Destroy_PendingInitialize) {
SetAudioRendererInitializeExpectations(PIPELINE_OK);
// Not returning the video initialization callback.
- EXPECT_CALL(*video_renderer_,
- Initialize(video_stream_.get(), _, _, _, _, _, _, _, _));
+ EXPECT_CALL(*video_renderer_, Initialize(video_stream_.get(), _, _, _, _));
InitializeAndExpect(PIPELINE_ERROR_ABORT);
EXPECT_EQ(PIPELINE_OK, initialization_status_);
@@ -338,8 +320,7 @@ TEST_F(RendererImplTest, Destroy_PendingInitializeAfterSetCdm) {
SetAudioRendererInitializeExpectations(PIPELINE_OK);
// Not returning the video initialization callback. So initialization will
// be pending.
- EXPECT_CALL(*video_renderer_,
- Initialize(video_stream_.get(), _, _, _, _, _, _, _, _));
+ EXPECT_CALL(*video_renderer_, Initialize(video_stream_.get(), _, _, _, _));
// SetCdm() will trigger the initialization to start. But it will not complete
// because the |video_renderer_| is not returning the initialization callback.
@@ -492,7 +473,7 @@ TEST_F(RendererImplTest, FlushAfterUnderflow) {
// Simulate underflow.
EXPECT_CALL(time_source_, StopTicking());
- audio_buffering_state_cb_.Run(BUFFERING_HAVE_NOTHING);
+ audio_renderer_client_->OnBufferingStateChange(BUFFERING_HAVE_NOTHING);
// Flush while underflowed. We shouldn't call StopTicking() again.
Flush(true);
@@ -517,7 +498,7 @@ TEST_F(RendererImplTest, AudioStreamEnded) {
EXPECT_CALL(time_source_, StopTicking());
EXPECT_CALL(callbacks_, OnEnded());
- audio_ended_cb_.Run();
+ audio_renderer_client_->OnEnded();
base::RunLoop().RunUntilIdle();
}
@@ -528,7 +509,7 @@ TEST_F(RendererImplTest, VideoStreamEnded) {
EXPECT_CALL(time_source_, StopTicking());
EXPECT_CALL(callbacks_, OnEnded());
- video_ended_cb_.Run();
+ video_renderer_client_->OnEnded();
base::RunLoop().RunUntilIdle();
}
@@ -537,20 +518,20 @@ TEST_F(RendererImplTest, AudioVideoStreamsEnded) {
Play();
// OnEnded() is called only when all streams have finished.
- audio_ended_cb_.Run();
+ audio_renderer_client_->OnEnded();
base::RunLoop().RunUntilIdle();
EXPECT_CALL(time_source_, StopTicking());
EXPECT_CALL(callbacks_, OnEnded());
- video_ended_cb_.Run();
+ video_renderer_client_->OnEnded();
base::RunLoop().RunUntilIdle();
}
TEST_F(RendererImplTest, ErrorAfterInitialize) {
InitializeWithAudio();
EXPECT_CALL(callbacks_, OnError(PIPELINE_ERROR_DECODE));
- audio_error_cb_.Run(PIPELINE_ERROR_DECODE);
+ audio_renderer_client_->OnError(PIPELINE_ERROR_DECODE);
base::RunLoop().RunUntilIdle();
}
@@ -559,7 +540,7 @@ TEST_F(RendererImplTest, ErrorDuringPlaying) {
Play();
EXPECT_CALL(callbacks_, OnError(PIPELINE_ERROR_DECODE));
- audio_error_cb_.Run(PIPELINE_ERROR_DECODE);
+ audio_renderer_client_->OnError(PIPELINE_ERROR_DECODE);
base::RunLoop().RunUntilIdle();
}
@@ -569,9 +550,9 @@ TEST_F(RendererImplTest, ErrorDuringFlush) {
InSequence s;
EXPECT_CALL(time_source_, StopTicking());
- EXPECT_CALL(*audio_renderer_, Flush(_)).WillOnce(DoAll(
- AudioError(&audio_error_cb_, PIPELINE_ERROR_DECODE),
- RunClosure<0>()));
+ EXPECT_CALL(*audio_renderer_, Flush(_))
+ .WillOnce(DoAll(SetError(&audio_renderer_client_, PIPELINE_ERROR_DECODE),
+ RunClosure<0>()));
EXPECT_CALL(callbacks_, OnError(PIPELINE_ERROR_DECODE));
EXPECT_CALL(callbacks_, OnFlushed());
renderer_impl_->Flush(
@@ -585,7 +566,7 @@ TEST_F(RendererImplTest, ErrorAfterFlush) {
Flush(false);
EXPECT_CALL(callbacks_, OnError(PIPELINE_ERROR_DECODE));
- audio_error_cb_.Run(PIPELINE_ERROR_DECODE);
+ audio_renderer_client_->OnError(PIPELINE_ERROR_DECODE);
base::RunLoop().RunUntilIdle();
}
@@ -594,12 +575,10 @@ TEST_F(RendererImplTest, ErrorDuringInitialize) {
SetAudioRendererInitializeExpectations(PIPELINE_OK);
// Force an audio error to occur during video renderer initialization.
- EXPECT_CALL(*video_renderer_,
- Initialize(video_stream_.get(), _, _, _, _, _, _, _, _))
- .WillOnce(DoAll(AudioError(&audio_error_cb_, PIPELINE_ERROR_DECODE),
- SaveArg<4>(&video_buffering_state_cb_),
- SaveArg<5>(&video_ended_cb_),
- RunCallback<1>(PIPELINE_OK)));
+ EXPECT_CALL(*video_renderer_, Initialize(video_stream_.get(), _, _, _, _))
+ .WillOnce(DoAll(SetError(&audio_renderer_client_, PIPELINE_ERROR_DECODE),
+ SaveArg<2>(&video_renderer_client_),
+ RunCallback<4>(PIPELINE_OK)));
InitializeAndExpect(PIPELINE_ERROR_DECODE);
}
@@ -610,7 +589,7 @@ TEST_F(RendererImplTest, AudioUnderflow) {
// Underflow should occur immediately with a single audio track.
EXPECT_CALL(time_source_, StopTicking());
- audio_buffering_state_cb_.Run(BUFFERING_HAVE_NOTHING);
+ audio_renderer_client_->OnBufferingStateChange(BUFFERING_HAVE_NOTHING);
}
TEST_F(RendererImplTest, AudioUnderflowWithVideo) {
@@ -620,7 +599,7 @@ TEST_F(RendererImplTest, AudioUnderflowWithVideo) {
// Underflow should be immediate when both audio and video are present and
// audio underflows.
EXPECT_CALL(time_source_, StopTicking());
- audio_buffering_state_cb_.Run(BUFFERING_HAVE_NOTHING);
+ audio_renderer_client_->OnBufferingStateChange(BUFFERING_HAVE_NOTHING);
}
TEST_F(RendererImplTest, VideoUnderflow) {
@@ -629,7 +608,7 @@ TEST_F(RendererImplTest, VideoUnderflow) {
// Underflow should occur immediately with a single video track.
EXPECT_CALL(time_source_, StopTicking());
- video_buffering_state_cb_.Run(BUFFERING_HAVE_NOTHING);
+ video_renderer_client_->OnBufferingStateChange(BUFFERING_HAVE_NOTHING);
}
TEST_F(RendererImplTest, VideoUnderflowWithAudio) {
@@ -642,7 +621,7 @@ TEST_F(RendererImplTest, VideoUnderflowWithAudio) {
// Underflow should be delayed when both audio and video are present and video
// underflows.
- video_buffering_state_cb_.Run(BUFFERING_HAVE_NOTHING);
+ video_renderer_client_->OnBufferingStateChange(BUFFERING_HAVE_NOTHING);
Mock::VerifyAndClearExpectations(&time_source_);
EXPECT_CALL(time_source_, StopTicking());
@@ -659,11 +638,11 @@ TEST_F(RendererImplTest, VideoUnderflowWithAudioVideoRecovers) {
// Underflow should be delayed when both audio and video are present and video
// underflows.
- video_buffering_state_cb_.Run(BUFFERING_HAVE_NOTHING);
+ video_renderer_client_->OnBufferingStateChange(BUFFERING_HAVE_NOTHING);
Mock::VerifyAndClearExpectations(&time_source_);
// If video recovers, the underflow should never occur.
- video_buffering_state_cb_.Run(BUFFERING_HAVE_ENOUGH);
+ video_renderer_client_->OnBufferingStateChange(BUFFERING_HAVE_ENOUGH);
base::RunLoop().RunUntilIdle();
}
@@ -677,11 +656,11 @@ TEST_F(RendererImplTest, VideoAndAudioUnderflow) {
// Underflow should be delayed when both audio and video are present and video
// underflows.
- video_buffering_state_cb_.Run(BUFFERING_HAVE_NOTHING);
+ video_renderer_client_->OnBufferingStateChange(BUFFERING_HAVE_NOTHING);
Mock::VerifyAndClearExpectations(&time_source_);
EXPECT_CALL(time_source_, StopTicking());
- audio_buffering_state_cb_.Run(BUFFERING_HAVE_NOTHING);
+ audio_renderer_client_->OnBufferingStateChange(BUFFERING_HAVE_NOTHING);
// Nothing else should primed on the message loop.
base::RunLoop().RunUntilIdle();
@@ -697,8 +676,8 @@ TEST_F(RendererImplTest, VideoUnderflowWithAudioFlush) {
// 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);
+ audio_renderer_client_->OnBufferingStateChange(BUFFERING_HAVE_NOTHING);
+ video_renderer_client_->OnBufferingStateChange(BUFFERING_HAVE_NOTHING);
Mock::VerifyAndClearExpectations(&time_source_);
// Flush the audio and video renderers, both think they're in an underflow
@@ -717,7 +696,7 @@ TEST_F(RendererImplTest, VideoUnderflowWithAudioFlush) {
EXPECT_CALL(time_source_, SetMediaTime(kStartTime));
EXPECT_CALL(*audio_renderer_, StartPlaying())
.WillOnce(
- SetBufferingState(&audio_buffering_state_cb_, BUFFERING_HAVE_ENOUGH));
+ SetBufferingState(&audio_renderer_client_, BUFFERING_HAVE_ENOUGH));
EXPECT_CALL(*video_renderer_, StartPlayingFrom(kStartTime));
renderer_impl_->StartPlayingFrom(kStartTime);
« no previous file with comments | « media/renderers/renderer_impl.cc ('k') | media/renderers/video_renderer_impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698