| Index: media/remoting/remote_renderer_impl_unittest.cc
|
| diff --git a/media/remoting/remote_renderer_impl_unittest.cc b/media/remoting/remote_renderer_impl_unittest.cc
|
| deleted file mode 100644
|
| index 66c447680156d673e71290bf3ff2aa91a1e2deae..0000000000000000000000000000000000000000
|
| --- a/media/remoting/remote_renderer_impl_unittest.cc
|
| +++ /dev/null
|
| @@ -1,567 +0,0 @@
|
| -// Copyright 2016 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -#include "media/remoting/remote_renderer_impl.h"
|
| -
|
| -#include "base/memory/ptr_util.h"
|
| -#include "base/run_loop.h"
|
| -#include "base/threading/thread_task_runner_handle.h"
|
| -#include "media/base/pipeline_status.h"
|
| -#include "media/base/test_helpers.h"
|
| -#include "media/remoting/fake_remoting_controller.h"
|
| -#include "media/remoting/fake_remoting_demuxer_stream_provider.h"
|
| -#include "media/remoting/remoting_renderer_controller.h"
|
| -#include "testing/gmock/include/gmock/gmock.h"
|
| -#include "testing/gtest/include/gtest/gtest.h"
|
| -
|
| -using testing::_;
|
| -using testing::Invoke;
|
| -using testing::Return;
|
| -
|
| -namespace media {
|
| -
|
| -namespace {
|
| -
|
| -PipelineMetadata DefaultMetadata() {
|
| - PipelineMetadata data;
|
| - data.has_audio = true;
|
| - data.has_video = true;
|
| - data.video_decoder_config = TestVideoConfig::Normal();
|
| - return data;
|
| -}
|
| -
|
| -class RendererClientImpl : public RendererClient {
|
| - public:
|
| - RendererClientImpl() {
|
| - ON_CALL(*this, OnStatisticsUpdate(_))
|
| - .WillByDefault(
|
| - Invoke(this, &RendererClientImpl::DelegateOnStatisticsUpdate));
|
| - ON_CALL(*this, OnPipelineStatus(_))
|
| - .WillByDefault(
|
| - Invoke(this, &RendererClientImpl::DelegateOnPipelineStatus));
|
| - ON_CALL(*this, OnBufferingStateChange(_))
|
| - .WillByDefault(
|
| - Invoke(this, &RendererClientImpl::DelegateOnBufferingStateChange));
|
| - ON_CALL(*this, OnVideoNaturalSizeChange(_))
|
| - .WillByDefault(Invoke(
|
| - this, &RendererClientImpl::DelegateOnVideoNaturalSizeChange));
|
| - ON_CALL(*this, OnVideoOpacityChange(_))
|
| - .WillByDefault(
|
| - Invoke(this, &RendererClientImpl::DelegateOnVideoOpacityChange));
|
| - ON_CALL(*this, OnDurationChange(_))
|
| - .WillByDefault(
|
| - Invoke(this, &RendererClientImpl::DelegateOnDurationChange));
|
| - }
|
| - ~RendererClientImpl() {}
|
| -
|
| - // RendererClient implementation.
|
| - void OnError(PipelineStatus status) override {}
|
| - void OnEnded() override {}
|
| - MOCK_METHOD1(OnStatisticsUpdate, void(const PipelineStatistics& stats));
|
| - MOCK_METHOD1(OnBufferingStateChange, void(BufferingState state));
|
| - void OnWaitingForDecryptionKey() override {}
|
| - MOCK_METHOD1(OnVideoNaturalSizeChange, void(const gfx::Size& size));
|
| - MOCK_METHOD1(OnVideoOpacityChange, void(bool opaque));
|
| - MOCK_METHOD1(OnDurationChange, void(base::TimeDelta duration));
|
| -
|
| - void DelegateOnStatisticsUpdate(const PipelineStatistics& stats) {
|
| - stats_ = stats;
|
| - }
|
| - void DelegateOnBufferingStateChange(BufferingState state) { state_ = state; }
|
| - void DelegateOnVideoNaturalSizeChange(const gfx::Size& size) { size_ = size; }
|
| - void DelegateOnVideoOpacityChange(bool opaque) { opaque_ = opaque; }
|
| - void DelegateOnDurationChange(base::TimeDelta duration) {
|
| - duration_ = duration;
|
| - }
|
| -
|
| - MOCK_METHOD1(OnPipelineStatus, void(PipelineStatus status));
|
| - void DelegateOnPipelineStatus(PipelineStatus status) {
|
| - VLOG(2) << "OnPipelineStatus status:" << status;
|
| - status_ = status;
|
| - }
|
| - MOCK_METHOD0(OnFlushCallback, void());
|
| -
|
| - PipelineStatus status() const { return status_; }
|
| - PipelineStatistics stats() const { return stats_; }
|
| - BufferingState state() const { return state_; }
|
| - gfx::Size size() const { return size_; }
|
| - bool opaque() const { return opaque_; }
|
| - base::TimeDelta duration() const { return duration_; }
|
| -
|
| - private:
|
| - PipelineStatus status_ = PIPELINE_OK;
|
| - BufferingState state_ = BUFFERING_HAVE_NOTHING;
|
| - gfx::Size size_;
|
| - bool opaque_ = false;
|
| - base::TimeDelta duration_;
|
| - PipelineStatistics stats_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(RendererClientImpl);
|
| -};
|
| -
|
| -} // namespace
|
| -
|
| -class RemoteRendererImplTest : public testing::Test {
|
| - public:
|
| - RemoteRendererImplTest()
|
| - : receiver_renderer_handle_(10),
|
| - receiver_audio_demuxer_callback_handle_(11),
|
| - receiver_video_demuxer_callback_handle_(12),
|
| - sender_client_handle_(remoting::kInvalidHandle),
|
| - sender_renderer_callback_handle_(remoting::kInvalidHandle),
|
| - sender_audio_demuxer_handle_(remoting::kInvalidHandle),
|
| - sender_video_demuxer_handle_(remoting::kInvalidHandle),
|
| - received_audio_ds_init_cb_(false),
|
| - received_video_ds_init_cb_(false),
|
| - renderer_initialized_(false) {}
|
| - ~RemoteRendererImplTest() 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<remoting::pb::RpcMessage> rpc(
|
| - new remoting::pb::RpcMessage());
|
| - ASSERT_TRUE(rpc->ParseFromArray(message->data(), message->size()));
|
| - switch (rpc->proc()) {
|
| - case remoting::pb::RpcMessage::RPC_ACQUIRE_RENDERER: {
|
| - // Issues RPC_ACQUIRE_RENDERER_DONE RPC message.
|
| - std::unique_ptr<remoting::pb::RpcMessage> acquire_done(
|
| - new remoting::pb::RpcMessage());
|
| - acquire_done->set_handle(rpc->integer_value());
|
| - acquire_done->set_proc(
|
| - remoting::pb::RpcMessage::RPC_ACQUIRE_RENDERER_DONE);
|
| - acquire_done->set_integer_value(receiver_renderer_handle_);
|
| - remoting_renderer_controller_->GetRpcBroker()->ProcessMessageFromRemote(
|
| - std::move(acquire_done));
|
| - } break;
|
| - case remoting::pb::RpcMessage::RPC_R_INITIALIZE: {
|
| - EXPECT_EQ(rpc->handle(), receiver_renderer_handle_);
|
| - sender_renderer_callback_handle_ =
|
| - rpc->renderer_initialize_rpc().callback_handle();
|
| - sender_client_handle_ = rpc->renderer_initialize_rpc().client_handle();
|
| - sender_audio_demuxer_handle_ =
|
| - rpc->renderer_initialize_rpc().audio_demuxer_handle();
|
| - sender_video_demuxer_handle_ =
|
| - rpc->renderer_initialize_rpc().video_demuxer_handle();
|
| -
|
| - // Issues audio RPC_DS_INITIALIZE RPC message.
|
| - if (sender_audio_demuxer_handle_ != remoting::kInvalidHandle) {
|
| - std::unique_ptr<remoting::pb::RpcMessage> ds_init(
|
| - new remoting::pb::RpcMessage());
|
| - ds_init->set_handle(sender_audio_demuxer_handle_);
|
| - ds_init->set_proc(remoting::pb::RpcMessage::RPC_DS_INITIALIZE);
|
| - ds_init->set_integer_value(receiver_audio_demuxer_callback_handle_);
|
| - remoting_renderer_controller_->GetRpcBroker()
|
| - ->ProcessMessageFromRemote(std::move(ds_init));
|
| - }
|
| - if (sender_video_demuxer_handle_ != remoting::kInvalidHandle) {
|
| - std::unique_ptr<remoting::pb::RpcMessage> ds_init(
|
| - new remoting::pb::RpcMessage());
|
| - ds_init->set_handle(sender_video_demuxer_handle_);
|
| - ds_init->set_proc(remoting::pb::RpcMessage::RPC_DS_INITIALIZE);
|
| - ds_init->set_integer_value(receiver_video_demuxer_callback_handle_);
|
| - remoting_renderer_controller_->GetRpcBroker()
|
| - ->ProcessMessageFromRemote(std::move(ds_init));
|
| - }
|
| - } break;
|
| - case remoting::pb::RpcMessage::RPC_DS_INITIALIZE_CALLBACK: {
|
| - if (rpc->handle() == receiver_audio_demuxer_callback_handle_)
|
| - received_audio_ds_init_cb_ = true;
|
| - if (rpc->handle() == receiver_video_demuxer_callback_handle_)
|
| - received_video_ds_init_cb_ = true;
|
| -
|
| - // Issues RPC_R_INITIALIZE_CALLBACK RPC message when receiving
|
| - // RPC_DS_INITIALIZE_CALLBACK on available streams.
|
| - if (received_audio_ds_init_cb_ ==
|
| - (sender_audio_demuxer_handle_ != remoting::kInvalidHandle) &&
|
| - received_video_ds_init_cb_ ==
|
| - (sender_video_demuxer_handle_ != remoting::kInvalidHandle)) {
|
| - std::unique_ptr<remoting::pb::RpcMessage> init_cb(
|
| - new remoting::pb::RpcMessage());
|
| - init_cb->set_handle(sender_renderer_callback_handle_);
|
| - init_cb->set_proc(
|
| - remoting::pb::RpcMessage::RPC_R_INITIALIZE_CALLBACK);
|
| - init_cb->set_boolean_value(true);
|
| - remoting_renderer_controller_->GetRpcBroker()
|
| - ->ProcessMessageFromRemote(std::move(init_cb));
|
| - renderer_initialized_ = true;
|
| - }
|
| -
|
| - } break;
|
| - case remoting::pb::RpcMessage::RPC_R_FLUSHUNTIL: {
|
| - // Issues RPC_R_FLUSHUNTIL_CALLBACK RPC message.
|
| - std::unique_ptr<remoting::pb::RpcMessage> flush_cb(
|
| - new remoting::pb::RpcMessage());
|
| - flush_cb->set_handle(rpc->renderer_flushuntil_rpc().callback_handle());
|
| - flush_cb->set_proc(remoting::pb::RpcMessage::RPC_R_FLUSHUNTIL_CALLBACK);
|
| - remoting_renderer_controller_->GetRpcBroker()->ProcessMessageFromRemote(
|
| - std::move(flush_cb));
|
| -
|
| - } break;
|
| -
|
| - default:
|
| - NOTREACHED();
|
| - }
|
| - RunPendingTasks();
|
| - }
|
| -
|
| - // Callback from RpcBroker when sending message to remote sink.
|
| - void OnSendMessageToSink(std::unique_ptr<std::vector<uint8_t>> message) {
|
| - std::unique_ptr<remoting::pb::RpcMessage> rpc(
|
| - new remoting::pb::RpcMessage());
|
| - ASSERT_TRUE(rpc->ParseFromArray(message->data(), message->size()));
|
| - received_rpc_.push_back(std::move(rpc));
|
| - }
|
| -
|
| - protected:
|
| - void InitializeRenderer() {
|
| - // Register media::RendererClient implementation.
|
| - render_client_.reset(new RendererClientImpl());
|
| - demuxer_stream_provider_.reset(new FakeRemotingDemuxerStreamProvider());
|
| - EXPECT_CALL(*render_client_, OnPipelineStatus(_)).Times(1);
|
| - DCHECK(remote_renderer_impl_);
|
| - // Redirect RPC message for simulate receiver scenario
|
| - remoting_renderer_controller_->GetRpcBroker()->SetMessageCallbackForTesting(
|
| - base::Bind(&RemoteRendererImplTest::RpcMessageResponseBot,
|
| - base::Unretained(this)));
|
| - RunPendingTasks();
|
| - remote_renderer_impl_->Initialize(
|
| - demuxer_stream_provider_.get(), render_client_.get(),
|
| - base::Bind(&RendererClientImpl::OnPipelineStatus,
|
| - base::Unretained(render_client_.get())));
|
| - RunPendingTasks();
|
| - // Redirect RPC message back to save for later check.
|
| - remoting_renderer_controller_->GetRpcBroker()->SetMessageCallbackForTesting(
|
| - base::Bind(&RemoteRendererImplTest::OnSendMessageToSink,
|
| - base::Unretained(this)));
|
| - RunPendingTasks();
|
| - }
|
| -
|
| - bool IsRendererInitialized() const {
|
| - return remote_renderer_impl_->state_ == RemoteRendererImpl::STATE_PLAYING;
|
| - }
|
| -
|
| - void OnReceivedRpc(std::unique_ptr<remoting::pb::RpcMessage> message) {
|
| - remote_renderer_impl_->OnReceivedRpc(std::move(message));
|
| - }
|
| -
|
| - void SetUp() override {
|
| - // Creates RemotingRendererController.
|
| - remoting_renderer_controller_ =
|
| - base::MakeUnique<RemotingRendererController>(
|
| - CreateRemotingSourceImpl(false));
|
| - remoting_renderer_controller_->OnMetadataChanged(DefaultMetadata());
|
| -
|
| - // Redirect RPC message to RemoteRendererImplTest::OnSendMessageToSink().
|
| - remoting_renderer_controller_->GetRpcBroker()->SetMessageCallbackForTesting(
|
| - base::Bind(&RemoteRendererImplTest::OnSendMessageToSink,
|
| - base::Unretained(this)));
|
| -
|
| - // Creates RemoteRendererImpl.
|
| - remote_renderer_impl_.reset(new RemoteRendererImpl(
|
| - base::ThreadTaskRunnerHandle::Get(),
|
| - remoting_renderer_controller_->GetWeakPtr(), nullptr));
|
| - RunPendingTasks();
|
| - }
|
| -
|
| - RemoteRendererImpl::State state() const {
|
| - return remote_renderer_impl_->state_;
|
| - }
|
| -
|
| - void RunPendingTasks() { base::RunLoop().RunUntilIdle(); }
|
| -
|
| - // Gets first available RpcMessage with specific |proc|.
|
| - const remoting::pb::RpcMessage* PeekRpcMessage(int proc) const {
|
| - for (auto& s : received_rpc_) {
|
| - if (proc == s->proc())
|
| - return s.get();
|
| - }
|
| - return nullptr;
|
| - }
|
| - int ReceivedRpcMessageCount() const { return received_rpc_.size(); }
|
| - void ResetReceivedRpcMessage() { received_rpc_.clear(); }
|
| -
|
| - void ValidateCurrentTime(base::TimeDelta current,
|
| - base::TimeDelta current_max) const {
|
| - ASSERT_EQ(remote_renderer_impl_->current_media_time_, current);
|
| - ASSERT_EQ(remote_renderer_impl_->current_max_time_, current_max);
|
| - }
|
| -
|
| - base::MessageLoop message_loop_;
|
| - std::unique_ptr<RemotingRendererController> remoting_renderer_controller_;
|
| - std::unique_ptr<RendererClientImpl> render_client_;
|
| - std::unique_ptr<FakeRemotingDemuxerStreamProvider> demuxer_stream_provider_;
|
| - std::unique_ptr<RemoteRendererImpl> remote_renderer_impl_;
|
| -
|
| - // RPC handles.
|
| - const int receiver_renderer_handle_;
|
| - const int receiver_audio_demuxer_callback_handle_;
|
| - const int receiver_video_demuxer_callback_handle_;
|
| - int sender_client_handle_;
|
| - int sender_renderer_callback_handle_;
|
| - int sender_audio_demuxer_handle_;
|
| - int sender_video_demuxer_handle_;
|
| -
|
| - // flag to indicate if RPC_DS_INITIALIZE_CALLBACK RPC messages are received.
|
| - bool received_audio_ds_init_cb_;
|
| - bool received_video_ds_init_cb_;
|
| -
|
| - // Check if |remote_renderer_impl_| is initialized successfully or not.
|
| - bool renderer_initialized_;
|
| -
|
| - // vector to store received RPC message with proc value
|
| - std::vector<std::unique_ptr<remoting::pb::RpcMessage>> received_rpc_;
|
| -
|
| - private:
|
| - DISALLOW_COPY_AND_ASSIGN(RemoteRendererImplTest);
|
| -};
|
| -
|
| -TEST_F(RemoteRendererImplTest, Initialize) {
|
| - InitializeRenderer();
|
| - RunPendingTasks();
|
| -
|
| - ASSERT_TRUE(IsRendererInitialized());
|
| - ASSERT_EQ(render_client_->status(), PIPELINE_OK);
|
| -}
|
| -
|
| -TEST_F(RemoteRendererImplTest, Flush) {
|
| - // Initialize Renderer.
|
| - InitializeRenderer();
|
| - RunPendingTasks();
|
| - ASSERT_TRUE(IsRendererInitialized());
|
| - ASSERT_EQ(render_client_->status(), PIPELINE_OK);
|
| -
|
| - // Flush Renderer.
|
| - // Redirect RPC message for simulate receiver scenario
|
| - remoting_renderer_controller_->GetRpcBroker()->SetMessageCallbackForTesting(
|
| - base::Bind(&RemoteRendererImplTest::RpcMessageResponseBot,
|
| - base::Unretained(this)));
|
| - RunPendingTasks();
|
| - EXPECT_CALL(*render_client_, OnFlushCallback()).Times(1);
|
| - remote_renderer_impl_->Flush(
|
| - base::Bind(&RendererClientImpl::OnFlushCallback,
|
| - base::Unretained(render_client_.get())));
|
| - RunPendingTasks();
|
| -}
|
| -
|
| -TEST_F(RemoteRendererImplTest, StartPlayingFrom) {
|
| - // Initialize Renderer
|
| - InitializeRenderer();
|
| - RunPendingTasks();
|
| - ASSERT_TRUE(IsRendererInitialized());
|
| - ASSERT_EQ(render_client_->status(), PIPELINE_OK);
|
| -
|
| - // StartPlaying from
|
| - base::TimeDelta seek = base::TimeDelta::FromMicroseconds(100);
|
| - remote_renderer_impl_->StartPlayingFrom(seek);
|
| - RunPendingTasks();
|
| -
|
| - // Checks if it sends out RPC message with correct value.
|
| - ASSERT_EQ(1, ReceivedRpcMessageCount());
|
| - const remoting::pb::RpcMessage* rpc =
|
| - PeekRpcMessage(remoting::pb::RpcMessage::RPC_R_STARTPLAYINGFROM);
|
| - ASSERT_TRUE(rpc);
|
| - ASSERT_EQ(rpc->integer64_value(), 100);
|
| -}
|
| -
|
| -TEST_F(RemoteRendererImplTest, SetVolume) {
|
| - // Initialize Renderer because, as of this writing, the pipeline guarantees it
|
| - // will not call SetVolume() until after the media::Renderer is initialized.
|
| - InitializeRenderer();
|
| - RunPendingTasks();
|
| - ASSERT_EQ(0, ReceivedRpcMessageCount());
|
| -
|
| - // SetVolume() will send remoting::pb::RpcMessage::RPC_R_SETVOLUME RPC.
|
| - remote_renderer_impl_->SetVolume(3.0);
|
| - RunPendingTasks();
|
| -
|
| - // Checks if it sends out RPC message with correct value.
|
| - ASSERT_EQ(1, ReceivedRpcMessageCount());
|
| - const remoting::pb::RpcMessage* rpc =
|
| - PeekRpcMessage(remoting::pb::RpcMessage::RPC_R_SETVOLUME);
|
| - ASSERT_TRUE(rpc);
|
| - ASSERT_TRUE(rpc->double_value() == 3.0);
|
| -}
|
| -
|
| -TEST_F(RemoteRendererImplTest, SetPlaybackRate) {
|
| - // Initialize Renderer because, as of this writing, the pipeline guarantees it
|
| - // will not call SetPlaybackRate() until after the media::Renderer is
|
| - // initialized.
|
| - InitializeRenderer();
|
| - RunPendingTasks();
|
| - ASSERT_EQ(0, ReceivedRpcMessageCount());
|
| -
|
| - remoting_renderer_controller_->GetRpcBroker()->SetMessageCallbackForTesting(
|
| - base::Bind(&RemoteRendererImplTest::OnSendMessageToSink,
|
| - base::Unretained(this)));
|
| - remote_renderer_impl_->SetPlaybackRate(2.5);
|
| - RunPendingTasks();
|
| - ASSERT_EQ(1, ReceivedRpcMessageCount());
|
| - // Checks if it sends out RPC message with correct value.
|
| - const remoting::pb::RpcMessage* rpc =
|
| - PeekRpcMessage(remoting::pb::RpcMessage::RPC_R_SETPLAYBACKRATE);
|
| - ASSERT_TRUE(rpc);
|
| - ASSERT_TRUE(rpc->double_value() == 2.5);
|
| -}
|
| -
|
| -TEST_F(RemoteRendererImplTest, OnTimeUpdate) {
|
| - // Issues RPC_RC_ONTIMEUPDATE RPC message.
|
| - base::TimeDelta media_time = base::TimeDelta::FromMicroseconds(100);
|
| - base::TimeDelta max_media_time = base::TimeDelta::FromMicroseconds(500);
|
| - std::unique_ptr<remoting::pb::RpcMessage> rpc(new remoting::pb::RpcMessage());
|
| - rpc->set_handle(5);
|
| - rpc->set_proc(remoting::pb::RpcMessage::RPC_RC_ONTIMEUPDATE);
|
| - auto* time_message = rpc->mutable_rendererclient_ontimeupdate_rpc();
|
| - time_message->set_time_usec(media_time.InMicroseconds());
|
| - time_message->set_max_time_usec(max_media_time.InMicroseconds());
|
| - OnReceivedRpc(std::move(rpc));
|
| - 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);
|
| - std::unique_ptr<remoting::pb::RpcMessage> rpc2(
|
| - new remoting::pb::RpcMessage());
|
| - rpc2->set_handle(5);
|
| - rpc2->set_proc(remoting::pb::RpcMessage::RPC_RC_ONTIMEUPDATE);
|
| - auto* time_message2 = rpc2->mutable_rendererclient_ontimeupdate_rpc();
|
| - time_message2->set_time_usec(media_time2.InMicroseconds());
|
| - time_message2->set_max_time_usec(max_media_time2.InMicroseconds());
|
| - OnReceivedRpc(std::move(rpc2));
|
| - // Because of invalid value, the time will not be updated and remain the same.
|
| - ValidateCurrentTime(media_time, max_media_time);
|
| -}
|
| -
|
| -TEST_F(RemoteRendererImplTest, OnBufferingStateChange) {
|
| - InitializeRenderer();
|
| - // Issues RPC_RC_ONBUFFERINGSTATECHANGE RPC message.
|
| - EXPECT_CALL(*render_client_,
|
| - OnBufferingStateChange(media::BUFFERING_HAVE_NOTHING))
|
| - .Times(1);
|
| - std::unique_ptr<remoting::pb::RpcMessage> rpc(new remoting::pb::RpcMessage());
|
| - rpc->set_handle(5);
|
| - rpc->set_proc(remoting::pb::RpcMessage::RPC_RC_ONBUFFERINGSTATECHANGE);
|
| - auto* buffering_state =
|
| - rpc->mutable_rendererclient_onbufferingstatechange_rpc();
|
| - buffering_state->set_state(
|
| - remoting::pb::RendererClientOnBufferingStateChange::
|
| - BUFFERING_HAVE_NOTHING);
|
| - OnReceivedRpc(std::move(rpc));
|
| - RunPendingTasks();
|
| -}
|
| -
|
| -TEST_F(RemoteRendererImplTest, OnVideoNaturalSizeChange) {
|
| - InitializeRenderer();
|
| - // Makes sure initial value of video natural size is not set to
|
| - // gfx::Size(100, 200).
|
| - ASSERT_NE(render_client_->size().width(), 100);
|
| - ASSERT_NE(render_client_->size().height(), 200);
|
| - // Issues RPC_RC_ONVIDEONATURALSIZECHANGE RPC message.
|
| - EXPECT_CALL(*render_client_, OnVideoNaturalSizeChange(gfx::Size(100, 200)))
|
| - .Times(1);
|
| - std::unique_ptr<remoting::pb::RpcMessage> rpc(new remoting::pb::RpcMessage());
|
| - rpc->set_handle(5);
|
| - rpc->set_proc(remoting::pb::RpcMessage::RPC_RC_ONVIDEONATURALSIZECHANGE);
|
| - auto* size_message =
|
| - rpc->mutable_rendererclient_onvideonatualsizechange_rpc();
|
| - size_message->set_width(100);
|
| - size_message->set_height(200);
|
| - OnReceivedRpc(std::move(rpc));
|
| - RunPendingTasks();
|
| - ASSERT_EQ(render_client_->size().width(), 100);
|
| - ASSERT_EQ(render_client_->size().height(), 200);
|
| -}
|
| -
|
| -TEST_F(RemoteRendererImplTest, OnVideoNaturalSizeChangeWithInvalidValue) {
|
| - InitializeRenderer();
|
| - // Issues RPC_RC_ONVIDEONATURALSIZECHANGE RPC message.
|
| - EXPECT_CALL(*render_client_, OnVideoNaturalSizeChange(_)).Times(0);
|
| - std::unique_ptr<remoting::pb::RpcMessage> rpc(new remoting::pb::RpcMessage());
|
| - rpc->set_handle(5);
|
| - rpc->set_proc(remoting::pb::RpcMessage::RPC_RC_ONVIDEONATURALSIZECHANGE);
|
| - auto* size_message =
|
| - rpc->mutable_rendererclient_onvideonatualsizechange_rpc();
|
| - size_message->set_width(-100);
|
| - size_message->set_height(0);
|
| - OnReceivedRpc(std::move(rpc));
|
| - RunPendingTasks();
|
| -}
|
| -
|
| -TEST_F(RemoteRendererImplTest, OnVideoOpacityChange) {
|
| - InitializeRenderer();
|
| - ASSERT_FALSE(render_client_->opaque());
|
| - // Issues RPC_RC_ONVIDEOOPACITYCHANGE RPC message.
|
| - EXPECT_CALL(*render_client_, OnVideoOpacityChange(true)).Times(1);
|
| - std::unique_ptr<remoting::pb::RpcMessage> rpc(new remoting::pb::RpcMessage());
|
| - rpc->set_handle(5);
|
| - rpc->set_proc(remoting::pb::RpcMessage::RPC_RC_ONVIDEOOPACITYCHANGE);
|
| - rpc->set_boolean_value(true);
|
| - OnReceivedRpc(std::move(rpc));
|
| - RunPendingTasks();
|
| - ASSERT_TRUE(render_client_->opaque());
|
| -}
|
| -
|
| -TEST_F(RemoteRendererImplTest, OnStatisticsUpdate) {
|
| - InitializeRenderer();
|
| - ASSERT_NE(render_client_->stats().audio_bytes_decoded, 1234U);
|
| - ASSERT_NE(render_client_->stats().video_bytes_decoded, 2345U);
|
| - ASSERT_NE(render_client_->stats().video_frames_decoded, 3456U);
|
| - ASSERT_NE(render_client_->stats().video_frames_dropped, 4567U);
|
| - ASSERT_NE(render_client_->stats().audio_memory_usage, 5678);
|
| - ASSERT_NE(render_client_->stats().video_memory_usage, 6789);
|
| - // Issues RPC_RC_ONSTATISTICSUPDATE RPC message.
|
| - EXPECT_CALL(*render_client_, OnStatisticsUpdate(_)).Times(1);
|
| - std::unique_ptr<remoting::pb::RpcMessage> rpc(new remoting::pb::RpcMessage());
|
| - rpc->set_handle(5);
|
| - rpc->set_proc(remoting::pb::RpcMessage::RPC_RC_ONSTATISTICSUPDATE);
|
| - auto* message = rpc->mutable_rendererclient_onstatisticsupdate_rpc();
|
| - message->set_audio_bytes_decoded(1234U);
|
| - message->set_video_bytes_decoded(2345U);
|
| - message->set_video_frames_decoded(3456U);
|
| - message->set_video_frames_dropped(4567U);
|
| - message->set_audio_memory_usage(5678);
|
| - message->set_video_memory_usage(6789);
|
| - OnReceivedRpc(std::move(rpc));
|
| - RunPendingTasks();
|
| - ASSERT_EQ(render_client_->stats().audio_bytes_decoded, 1234U);
|
| - ASSERT_EQ(render_client_->stats().video_bytes_decoded, 2345U);
|
| - ASSERT_EQ(render_client_->stats().video_frames_decoded, 3456U);
|
| - ASSERT_EQ(render_client_->stats().video_frames_dropped, 4567U);
|
| - ASSERT_EQ(render_client_->stats().audio_memory_usage, 5678);
|
| - ASSERT_EQ(render_client_->stats().video_memory_usage, 6789);
|
| -}
|
| -
|
| -TEST_F(RemoteRendererImplTest, OnDurationChange) {
|
| - InitializeRenderer();
|
| - ASSERT_NE(render_client_->duration(),
|
| - base::TimeDelta::FromMicroseconds(1234));
|
| - // Issues RPC_RC_ONDURATIONCHANGE RPC message.
|
| - EXPECT_CALL(*render_client_,
|
| - OnDurationChange(base::TimeDelta::FromMicroseconds(1234)))
|
| - .Times(1);
|
| - std::unique_ptr<remoting::pb::RpcMessage> rpc(new remoting::pb::RpcMessage());
|
| - rpc->set_handle(5);
|
| - rpc->set_proc(remoting::pb::RpcMessage::RPC_RC_ONDURATIONCHANGE);
|
| - rpc->set_integer64_value(1234);
|
| - OnReceivedRpc(std::move(rpc));
|
| - RunPendingTasks();
|
| - ASSERT_EQ(render_client_->duration(),
|
| - base::TimeDelta::FromMicroseconds(1234));
|
| -}
|
| -
|
| -TEST_F(RemoteRendererImplTest, OnDurationChangeWithInvalidValue) {
|
| - InitializeRenderer();
|
| - // Issues RPC_RC_ONDURATIONCHANGE RPC message.
|
| - EXPECT_CALL(*render_client_, OnDurationChange(_)).Times(0);
|
| - std::unique_ptr<remoting::pb::RpcMessage> rpc(new remoting::pb::RpcMessage());
|
| - rpc->set_handle(5);
|
| - rpc->set_proc(remoting::pb::RpcMessage::RPC_RC_ONDURATIONCHANGE);
|
| - rpc->set_integer64_value(-345);
|
| - OnReceivedRpc(std::move(rpc));
|
| - RunPendingTasks();
|
| -}
|
| -
|
| -// TODO(xjz): Tests for detecting PACING_TOO_SLOWLY and FRAME_DROP_RATE_HIGH.
|
| -
|
| -} // namespace media
|
|
|