diff options
Diffstat (limited to 'chromium/media/remoting/courier_renderer_unittest.cc')
-rw-r--r-- | chromium/media/remoting/courier_renderer_unittest.cc | 179 |
1 files changed, 91 insertions, 88 deletions
diff --git a/chromium/media/remoting/courier_renderer_unittest.cc b/chromium/media/remoting/courier_renderer_unittest.cc index 739cbc65878..c27a4812b09 100644 --- a/chromium/media/remoting/courier_renderer_unittest.cc +++ b/chromium/media/remoting/courier_renderer_unittest.cc @@ -23,10 +23,11 @@ #include "media/remoting/proto_enum_utils.h" #include "media/remoting/proto_utils.h" #include "media/remoting/renderer_controller.h" -#include "media/remoting/rpc_broker.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" +#include "third_party/openscreen/src/cast/streaming/rpc_messenger.h" +using openscreen::cast::RpcMessenger; using testing::_; using testing::Invoke; using testing::Return; @@ -85,6 +86,10 @@ class RendererClientImpl final : public RendererClient { .WillByDefault( Invoke(this, &RendererClientImpl::DelegateOnVideoOpacityChange)); } + + RendererClientImpl(const RendererClientImpl&) = delete; + RendererClientImpl& operator=(const RendererClientImpl&) = delete; + ~RendererClientImpl() = default; // RendererClient implementation. @@ -144,8 +149,6 @@ class RendererClientImpl final : public RendererClient { PipelineStatistics stats_; VideoDecoderConfig video_decoder_config_; AudioDecoderConfig audio_decoder_config_; - - DISALLOW_COPY_AND_ASSIGN(RendererClientImpl); }; } // namespace @@ -153,87 +156,90 @@ class RendererClientImpl final : public RendererClient { class CourierRendererTest : public testing::Test { public: CourierRendererTest() = default; + + CourierRendererTest(const CourierRendererTest&) = delete; + CourierRendererTest& operator=(const CourierRendererTest&) = delete; + ~CourierRendererTest() override = default; // Use this function to mimic receiver to handle RPC message for renderer // initialization, - void RpcMessageResponseBot(std::unique_ptr<std::vector<uint8_t>> message) { - std::unique_ptr<openscreen::cast::RpcMessage> rpc( - new openscreen::cast::RpcMessage()); - ASSERT_TRUE(rpc->ParseFromArray(message->data(), message->size())); - switch (rpc->proc()) { + void RpcMessageResponseBot(std::vector<uint8_t> message) { + openscreen::cast::RpcMessage rpc; + ASSERT_TRUE(rpc.ParseFromArray(message.data(), message.size())); + switch (rpc.proc()) { case openscreen::cast::RpcMessage::RPC_ACQUIRE_RENDERER: { - DCHECK(rpc->has_integer_value()); - sender_renderer_handle_ = rpc->integer_value(); + DCHECK(rpc.has_integer_value()); + sender_renderer_handle_ = rpc.integer_value(); // Issues RPC_ACQUIRE_RENDERER_DONE RPC message. auto acquire_done = std::make_unique<openscreen::cast::RpcMessage>(); acquire_done->set_handle(sender_renderer_handle_); acquire_done->set_proc( openscreen::cast::RpcMessage::RPC_ACQUIRE_RENDERER_DONE); acquire_done->set_integer_value(receiver_renderer_handle_); - controller_->GetRpcBroker()->ProcessMessageFromRemote( + controller_->GetRpcMessenger()->ProcessMessageFromRemote( std::move(acquire_done)); } break; case openscreen::cast::RpcMessage::RPC_ACQUIRE_DEMUXER: { if (!is_backward_compatible_mode_) { - int acquire_demuxer_handle = RpcBroker::kAcquireDemuxerHandle; - EXPECT_EQ(rpc->handle(), acquire_demuxer_handle); + int acquire_demuxer_handle = RpcMessenger::kAcquireDemuxerHandle; + EXPECT_EQ(rpc.handle(), acquire_demuxer_handle); sender_audio_demuxer_handle_ = - rpc->acquire_demuxer_rpc().audio_demuxer_handle(); + rpc.acquire_demuxer_rpc().audio_demuxer_handle(); sender_video_demuxer_handle_ = - rpc->acquire_demuxer_rpc().video_demuxer_handle(); + rpc.acquire_demuxer_rpc().video_demuxer_handle(); // Issues audio RPC_DS_INITIALIZE RPC message. - if (sender_audio_demuxer_handle_ != RpcBroker::kInvalidHandle) { + if (sender_audio_demuxer_handle_ != RpcMessenger::kInvalidHandle) { auto ds_init = std::make_unique<openscreen::cast::RpcMessage>(); ds_init->set_handle(sender_audio_demuxer_handle_); ds_init->set_proc(openscreen::cast::RpcMessage::RPC_DS_INITIALIZE); ds_init->set_integer_value(receiver_audio_demuxer_callback_handle_); - controller_->GetRpcBroker()->ProcessMessageFromRemote( + controller_->GetRpcMessenger()->ProcessMessageFromRemote( std::move(ds_init)); } // Issues video RPC_DS_INITIALIZE RPC message. - if (sender_video_demuxer_handle_ != RpcBroker::kInvalidHandle) { + if (sender_video_demuxer_handle_ != RpcMessenger::kInvalidHandle) { auto ds_init = std::make_unique<openscreen::cast::RpcMessage>(); ds_init->set_handle(sender_video_demuxer_handle_); ds_init->set_proc(openscreen::cast::RpcMessage::RPC_DS_INITIALIZE); ds_init->set_integer_value(receiver_video_demuxer_callback_handle_); - controller_->GetRpcBroker()->ProcessMessageFromRemote( + controller_->GetRpcMessenger()->ProcessMessageFromRemote( std::move(ds_init)); } } } break; case openscreen::cast::RpcMessage::RPC_R_INITIALIZE: { sender_renderer_callback_handle_ = - rpc->renderer_initialize_rpc().callback_handle(); - sender_client_handle_ = rpc->renderer_initialize_rpc().client_handle(); + rpc.renderer_initialize_rpc().callback_handle(); + sender_client_handle_ = rpc.renderer_initialize_rpc().client_handle(); if (is_backward_compatible_mode_) { - EXPECT_EQ(rpc->handle(), receiver_renderer_handle_); + EXPECT_EQ(rpc.handle(), receiver_renderer_handle_); sender_audio_demuxer_handle_ = - rpc->renderer_initialize_rpc().audio_demuxer_handle(); + rpc.renderer_initialize_rpc().audio_demuxer_handle(); sender_video_demuxer_handle_ = - rpc->renderer_initialize_rpc().video_demuxer_handle(); + rpc.renderer_initialize_rpc().video_demuxer_handle(); // Issues audio RPC_DS_INITIALIZE RPC message. - if (sender_audio_demuxer_handle_ != RpcBroker::kInvalidHandle) { + if (sender_audio_demuxer_handle_ != RpcMessenger::kInvalidHandle) { auto ds_init = std::make_unique<openscreen::cast::RpcMessage>(); ds_init->set_handle(sender_audio_demuxer_handle_); ds_init->set_proc(openscreen::cast::RpcMessage::RPC_DS_INITIALIZE); ds_init->set_integer_value(receiver_audio_demuxer_callback_handle_); - controller_->GetRpcBroker()->ProcessMessageFromRemote( + controller_->GetRpcMessenger()->ProcessMessageFromRemote( std::move(ds_init)); } // Issues video RPC_DS_INITIALIZE RPC message. - if (sender_video_demuxer_handle_ != RpcBroker::kInvalidHandle) { + if (sender_video_demuxer_handle_ != RpcMessenger::kInvalidHandle) { auto ds_init = std::make_unique<openscreen::cast::RpcMessage>(); ds_init->set_handle(sender_video_demuxer_handle_); ds_init->set_proc(openscreen::cast::RpcMessage::RPC_DS_INITIALIZE); ds_init->set_integer_value(receiver_video_demuxer_callback_handle_); - controller_->GetRpcBroker()->ProcessMessageFromRemote( + controller_->GetRpcMessenger()->ProcessMessageFromRemote( std::move(ds_init)); } } else { @@ -244,21 +250,21 @@ class CourierRendererTest : public testing::Test { init_cb->set_proc( openscreen::cast::RpcMessage::RPC_R_INITIALIZE_CALLBACK); init_cb->set_boolean_value(is_successfully_initialized_); - controller_->GetRpcBroker()->ProcessMessageFromRemote( + controller_->GetRpcMessenger()->ProcessMessageFromRemote( std::move(init_cb)); } } break; case openscreen::cast::RpcMessage::RPC_DS_INITIALIZE_CALLBACK: { - if (rpc->handle() == receiver_audio_demuxer_callback_handle_) + if (rpc.handle() == receiver_audio_demuxer_callback_handle_) received_audio_ds_init_cb_ = true; - if (rpc->handle() == receiver_video_demuxer_callback_handle_) + if (rpc.handle() == receiver_video_demuxer_callback_handle_) received_video_ds_init_cb_ = true; // Check whether the demuxer at the receiver end is initialized. - if (received_audio_ds_init_cb_ == - (sender_audio_demuxer_handle_ != RpcBroker::kInvalidHandle) && - received_video_ds_init_cb_ == - (sender_video_demuxer_handle_ != RpcBroker::kInvalidHandle)) { + if (received_audio_ds_init_cb_ == (sender_audio_demuxer_handle_ != + RpcMessenger::kInvalidHandle) && + received_video_ds_init_cb_ == (sender_video_demuxer_handle_ != + RpcMessenger::kInvalidHandle)) { is_receiver_demuxer_initialized_ = true; } @@ -270,7 +276,7 @@ class CourierRendererTest : public testing::Test { init_cb->set_proc( openscreen::cast::RpcMessage::RPC_R_INITIALIZE_CALLBACK); init_cb->set_boolean_value(is_successfully_initialized_); - controller_->GetRpcBroker()->ProcessMessageFromRemote( + controller_->GetRpcMessenger()->ProcessMessageFromRemote( std::move(init_cb)); } } break; @@ -278,10 +284,10 @@ class CourierRendererTest : public testing::Test { // Issues RPC_R_FLUSHUNTIL_CALLBACK RPC message. std::unique_ptr<openscreen::cast::RpcMessage> flush_cb( new openscreen::cast::RpcMessage()); - flush_cb->set_handle(rpc->renderer_flushuntil_rpc().callback_handle()); + flush_cb->set_handle(rpc.renderer_flushuntil_rpc().callback_handle()); flush_cb->set_proc( openscreen::cast::RpcMessage::RPC_R_FLUSHUNTIL_CALLBACK); - controller_->GetRpcBroker()->ProcessMessageFromRemote( + controller_->GetRpcMessenger()->ProcessMessageFromRemote( std::move(flush_cb)); } break; case openscreen::cast::RpcMessage::RPC_R_SETVOLUME: @@ -294,14 +300,20 @@ class CourierRendererTest : public testing::Test { RunPendingTasks(); } - // Callback from RpcBroker when sending message to remote sink. - void OnSendMessageToSink(std::unique_ptr<std::vector<uint8_t>> message) { - std::unique_ptr<openscreen::cast::RpcMessage> rpc( - new openscreen::cast::RpcMessage()); - ASSERT_TRUE(rpc->ParseFromArray(message->data(), message->size())); + // Callback from RpcMessenger when sending message to remote sink. + void OnSendMessageToSink(std::vector<uint8_t> message) { + openscreen::cast::RpcMessage rpc; + ASSERT_TRUE(rpc.ParseFromArray(message.data(), message.size())); received_rpc_.push_back(std::move(rpc)); } + void RewireSendMessageCallbackToSink() { + controller_->GetRpcMessenger()->set_send_message_cb_for_testing( + [this](std::vector<uint8_t> message) { + this->OnSendMessageToSink(message); + }); + } + protected: void InitializeRenderer() { // Register media::RendererClient implementation. @@ -310,19 +322,17 @@ class CourierRendererTest : public testing::Test { EXPECT_CALL(*render_client_, OnPipelineStatus(_)).Times(1); DCHECK(renderer_); // Redirect RPC message for simulate receiver scenario - controller_->GetRpcBroker()->SetMessageCallbackForTesting( - base::BindRepeating(&CourierRendererTest::RpcMessageResponseBot, - base::Unretained(this))); + controller_->GetRpcMessenger()->set_send_message_cb_for_testing( + [this](std::vector<uint8_t> message) { + this->RpcMessageResponseBot(message); + }); RunPendingTasks(); renderer_->Initialize( media_resource_.get(), render_client_.get(), base::BindOnce(&RendererClientImpl::OnPipelineStatus, base::Unretained(render_client_.get()))); RunPendingTasks(); - // Redirect RPC message back to save for later check. - controller_->GetRpcBroker()->SetMessageCallbackForTesting( - base::BindRepeating(&CourierRendererTest::OnSendMessageToSink, - base::Unretained(this))); + RewireSendMessageCallbackToSink(); RunPendingTasks(); } @@ -350,16 +360,12 @@ class CourierRendererTest : public testing::Test { controller_ = FakeRemoterFactory::CreateController(false); controller_->OnMetadataChanged(DefaultMetadata()); - // Redirect RPC message to CourierRendererTest::OnSendMessageToSink(). - controller_->GetRpcBroker()->SetMessageCallbackForTesting( - base::BindRepeating(&CourierRendererTest::OnSendMessageToSink, - base::Unretained(this))); - + RewireSendMessageCallbackToSink(); renderer_ = std::make_unique<CourierRenderer>(base::ThreadTaskRunnerHandle::Get(), controller_->GetWeakPtr(), nullptr); renderer_->clock_ = &clock_; - clock_.Advance(base::TimeDelta::FromSeconds(1)); + clock_.Advance(base::Seconds(1)); RunPendingTasks(); } @@ -371,9 +377,10 @@ class CourierRendererTest : public testing::Test { // Gets first available RpcMessage with specific |proc|. const openscreen::cast::RpcMessage* PeekRpcMessage(int proc) const { for (auto& s : received_rpc_) { - if (proc == s->proc()) - return s.get(); + if (proc == s.proc()) + return &s; } + return nullptr; } int ReceivedRpcMessageCount() const { return received_rpc_.size(); } @@ -405,9 +412,8 @@ class CourierRendererTest : public testing::Test { int end_serial_number) { for (int i = start_serial_number; i < end_serial_number; ++i) { ASSERT_FALSE(DidEncounterFatalError()); - IssueTimeUpdateRpc(base::TimeDelta::FromMilliseconds(100 + i * 800), - base::TimeDelta::FromSeconds(100)); - clock_.Advance(base::TimeDelta::FromSeconds(1)); + IssueTimeUpdateRpc(base::Milliseconds(100 + i * 800), base::Seconds(100)); + clock_.Advance(base::Seconds(1)); RunPendingTasks(); } } @@ -469,10 +475,10 @@ class CourierRendererTest : public testing::Test { const int receiver_audio_demuxer_callback_handle_{11}; const int receiver_video_demuxer_callback_handle_{12}; int sender_renderer_handle_; - int sender_client_handle_{RpcBroker::kInvalidHandle}; - int sender_renderer_callback_handle_{RpcBroker::kInvalidHandle}; - int sender_audio_demuxer_handle_{RpcBroker::kInvalidHandle}; - int sender_video_demuxer_handle_{RpcBroker::kInvalidHandle}; + int sender_client_handle_{RpcMessenger::kInvalidHandle}; + int sender_renderer_callback_handle_{RpcMessenger::kInvalidHandle}; + int sender_audio_demuxer_handle_{RpcMessenger::kInvalidHandle}; + int sender_video_demuxer_handle_{RpcMessenger::kInvalidHandle}; // Indicates whether the test runs in backward-compatible mode. bool is_backward_compatible_mode_ = false; @@ -488,11 +494,8 @@ class CourierRendererTest : public testing::Test { // the renderer on the receiver side. bool is_successfully_initialized_ = true; - // Stores RPC messages that are sending to remote sink. - std::vector<std::unique_ptr<openscreen::cast::RpcMessage>> received_rpc_; - - private: - DISALLOW_COPY_AND_ASSIGN(CourierRendererTest); + // Stores RPC messages that have been sent to the remote sink. + std::vector<openscreen::cast::RpcMessage> received_rpc_; }; TEST_F(CourierRendererTest, Initialize) { @@ -529,7 +532,7 @@ TEST_F(CourierRendererTest, InitializeFailed) { RunPendingTasks(); ASSERT_EQ(0, ReceivedRpcMessageCount()); - base::TimeDelta seek = base::TimeDelta::FromMicroseconds(100); + base::TimeDelta seek = base::Microseconds(100); renderer_->StartPlayingFrom(seek); RunPendingTasks(); ASSERT_EQ(0, ReceivedRpcMessageCount()); @@ -552,8 +555,10 @@ TEST_F(CourierRendererTest, Flush) { // Flush Renderer. // Redirect RPC message for simulate receiver scenario - controller_->GetRpcBroker()->SetMessageCallbackForTesting(base::BindRepeating( - &CourierRendererTest::RpcMessageResponseBot, base::Unretained(this))); + controller_->GetRpcMessenger()->set_send_message_cb_for_testing( + [this](std::vector<uint8_t> message) { + this->RpcMessageResponseBot(message); + }); RunPendingTasks(); EXPECT_CALL(*render_client_, OnFlushCallback()).Times(1); renderer_->Flush(base::BindOnce(&RendererClientImpl::OnFlushCallback, @@ -569,7 +574,7 @@ TEST_F(CourierRendererTest, StartPlayingFrom) { ASSERT_EQ(render_client_->status(), PIPELINE_OK); // StartPlaying from - base::TimeDelta seek = base::TimeDelta::FromMicroseconds(100); + base::TimeDelta seek = base::Microseconds(100); renderer_->StartPlayingFrom(seek); RunPendingTasks(); @@ -578,7 +583,7 @@ TEST_F(CourierRendererTest, StartPlayingFrom) { const openscreen::cast::RpcMessage* rpc = PeekRpcMessage(openscreen::cast::RpcMessage::RPC_R_STARTPLAYINGFROM); ASSERT_TRUE(rpc); - ASSERT_EQ(rpc->integer64_value(), 100); + ASSERT_EQ(100, rpc->integer64_value()); } TEST_F(CourierRendererTest, SetVolume) { @@ -597,7 +602,7 @@ TEST_F(CourierRendererTest, SetVolume) { const openscreen::cast::RpcMessage* rpc = PeekRpcMessage(openscreen::cast::RpcMessage::RPC_R_SETVOLUME); ASSERT_TRUE(rpc); - ASSERT_TRUE(rpc->double_value() == 3.0); + ASSERT_DOUBLE_EQ(3.0, rpc->double_value()); } TEST_F(CourierRendererTest, SetPlaybackRate) { @@ -615,18 +620,18 @@ TEST_F(CourierRendererTest, SetPlaybackRate) { const openscreen::cast::RpcMessage* rpc = PeekRpcMessage(openscreen::cast::RpcMessage::RPC_R_SETPLAYBACKRATE); ASSERT_TRUE(rpc); - ASSERT_TRUE(rpc->double_value() == 2.5); + ASSERT_DOUBLE_EQ(2.5, rpc->double_value()); } TEST_F(CourierRendererTest, OnTimeUpdate) { - base::TimeDelta media_time = base::TimeDelta::FromMicroseconds(100); - base::TimeDelta max_media_time = base::TimeDelta::FromMicroseconds(500); + base::TimeDelta media_time = base::Microseconds(100); + base::TimeDelta max_media_time = base::Microseconds(500); IssueTimeUpdateRpc(media_time, max_media_time); ValidateCurrentTime(media_time, max_media_time); // Issues RPC_RC_ONTIMEUPDATE RPC message with invalid time - base::TimeDelta media_time2 = base::TimeDelta::FromMicroseconds(-100); - base::TimeDelta max_media_time2 = base::TimeDelta::FromMicroseconds(500); + base::TimeDelta media_time2 = base::Microseconds(-100); + base::TimeDelta max_media_time2 = base::Microseconds(500); IssueTimeUpdateRpc(media_time2, max_media_time2); // Because of invalid value, the time will not be updated and remain the same. ValidateCurrentTime(media_time, max_media_time); @@ -642,7 +647,7 @@ TEST_F(CourierRendererTest, OnBufferingStateChange) { TEST_F(CourierRendererTest, OnAudioConfigChange) { const AudioDecoderConfig kNewAudioConfig( - kCodecVorbis, kSampleFormatPlanarF32, CHANNEL_LAYOUT_STEREO, 44100, + AudioCodec::kVorbis, kSampleFormatPlanarF32, CHANNEL_LAYOUT_STEREO, 44100, EmptyExtraData(), EncryptionScheme::kUnencrypted); InitializeRenderer(); // Make sure initial audio config does not match the one we intend to send. @@ -753,9 +758,7 @@ TEST_F(CourierRendererTest, OnStatisticsUpdate) { TEST_F(CourierRendererTest, OnPacingTooSlowly) { InitializeRenderer(); - - controller_->GetRpcBroker()->SetMessageCallbackForTesting(base::BindRepeating( - &CourierRendererTest::OnSendMessageToSink, base::Unretained(this))); + RewireSendMessageCallbackToSink(); // There should be no error reported with this playback rate. renderer_->SetPlaybackRate(0.8); @@ -763,7 +766,7 @@ TEST_F(CourierRendererTest, OnPacingTooSlowly) { EXPECT_CALL(*render_client_, OnBufferingStateChange(BUFFERING_HAVE_ENOUGH, _)) .Times(1); IssuesBufferingStateRpc(BufferingState::BUFFERING_HAVE_ENOUGH); - clock_.Advance(base::TimeDelta::FromSeconds(3)); + clock_.Advance(base::Seconds(3)); VerifyAndReportTimeUpdates(0, 15); ASSERT_FALSE(DidEncounterFatalError()); @@ -771,7 +774,7 @@ TEST_F(CourierRendererTest, OnPacingTooSlowly) { // playback was continuously delayed for 10 times. renderer_->SetPlaybackRate(1); RunPendingTasks(); - clock_.Advance(base::TimeDelta::FromSeconds(3)); + clock_.Advance(base::Seconds(3)); VerifyAndReportTimeUpdates(15, 30); ASSERT_TRUE(DidEncounterFatalError()); } @@ -782,7 +785,7 @@ TEST_F(CourierRendererTest, OnFrameDropRateHigh) { for (int i = 0; i < 7; ++i) { ASSERT_FALSE(DidEncounterFatalError()); // Not enough measurements. IssueStatisticsUpdateRpc(); - clock_.Advance(base::TimeDelta::FromSeconds(1)); + clock_.Advance(base::Seconds(1)); RunPendingTasks(); } ASSERT_TRUE(DidEncounterFatalError()); |