From 62a50b52b8d3af42cbc519688505f43982cf259e Mon Sep 17 00:00:00 2001 From: yucliu Date: Mon, 28 Sep 2015 20:32:28 -0700 Subject: [PATCH] [Chromecast] CastResource::Client inside CastResource Since all the CastResource need to store pointer to Client, making CastResource store the pointer will simplify the code. BUG= Review URL: https://codereview.chromium.org/1375753003 Cr-Commit-Position: refs/heads/master@{#351251} --- chromecast/base/BUILD.gn | 1 + chromecast/base/cast_resource.cc | 23 +++++++++++++++++++ chromecast/base/cast_resource.h | 10 +++++--- .../media/cma_media_pipeline_client.cc | 19 ++++----------- .../browser/media/cma_media_pipeline_client.h | 3 --- chromecast/chromecast.gyp | 1 + 6 files changed, 37 insertions(+), 20 deletions(-) create mode 100644 chromecast/base/cast_resource.cc diff --git a/chromecast/base/BUILD.gn b/chromecast/base/BUILD.gn index c171c1bc7e705c..2b48a7395ba689 100644 --- a/chromecast/base/BUILD.gn +++ b/chromecast/base/BUILD.gn @@ -14,6 +14,7 @@ source_set("base") { "android/system_time_change_notifier_android.h", "cast_paths.cc", "cast_paths.h", + "cast_resource.cc", "cast_resource.h", "chromecast_switches.cc", "chromecast_switches.h", diff --git a/chromecast/base/cast_resource.cc b/chromecast/base/cast_resource.cc new file mode 100644 index 00000000000000..cbe9b51d7cd5bf --- /dev/null +++ b/chromecast/base/cast_resource.cc @@ -0,0 +1,23 @@ +// Copyright 2015 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 "chromecast/base/cast_resource.h" + +namespace chromecast { + +void CastResource::SetCastResourceClient(Client* client) { + client_ = client; +} + +void CastResource::NotifyResourceAcquired() { + if (client_) + client_->OnResourceAcquired(this); +} + +void CastResource::NotifyResourceReleased(Resource remain) { + if (client_) + client_->OnResourceReleased(this, remain); +} + +} // namespace chromecast diff --git a/chromecast/base/cast_resource.h b/chromecast/base/cast_resource.h index 8836e9c7c17836..cd248d77edc268 100644 --- a/chromecast/base/cast_resource.h +++ b/chromecast/base/cast_resource.h @@ -52,17 +52,21 @@ class CastResource { virtual ~Client() {} }; - CastResource() {} - - virtual void SetCastResourceClient(Client* client) = 0; + void SetCastResourceClient(Client* client); // Called to release resources. Implementation should call // Client::OnResourceReleased when resource is released on its side. virtual void ReleaseResource(Resource resource) = 0; protected: + CastResource() : client_(nullptr) {} virtual ~CastResource() {} + void NotifyResourceAcquired(); + void NotifyResourceReleased(Resource remain); + private: + Client* client_; + DISALLOW_COPY_AND_ASSIGN(CastResource); }; diff --git a/chromecast/browser/media/cma_media_pipeline_client.cc b/chromecast/browser/media/cma_media_pipeline_client.cc index 7286c766ebfb49..bca511b6339e08 100644 --- a/chromecast/browser/media/cma_media_pipeline_client.cc +++ b/chromecast/browser/media/cma_media_pipeline_client.cc @@ -8,7 +8,7 @@ namespace chromecast { namespace media { -CmaMediaPipelineClient::CmaMediaPipelineClient() : client_(nullptr) {} +CmaMediaPipelineClient::CmaMediaPipelineClient() {} CmaMediaPipelineClient::~CmaMediaPipelineClient() {} @@ -19,13 +19,11 @@ CmaMediaPipelineClient::CreateMediaPipelineBackend( } void CmaMediaPipelineClient::OnMediaPipelineBackendCreated() { - if (client_) - client_->OnResourceAcquired(this); + NotifyResourceAcquired(); } void CmaMediaPipelineClient::OnMediaPipelineBackendDestroyed() { - if (client_) - client_->OnResourceReleased(this, CastResource::kResourceNone); + NotifyResourceReleased(CastResource::kResourceNone); } void CmaMediaPipelineClient::ReleaseResource(CastResource::Resource resource) { @@ -34,15 +32,8 @@ void CmaMediaPipelineClient::ReleaseResource(CastResource::Resource resource) { CastResource::kResourceScreenPrimary); // TODO(yucliu): media pipeline need to stop audio video seperately - if (!(resource & audio_video_resource)) { - if (client_) - client_->OnResourceReleased(this, audio_video_resource); - } -} - -void CmaMediaPipelineClient::SetCastResourceClient( - CastResource::Client* client) { - client_ = client; + if (!(resource & audio_video_resource)) + NotifyResourceReleased(audio_video_resource); } } // namespace media diff --git a/chromecast/browser/media/cma_media_pipeline_client.h b/chromecast/browser/media/cma_media_pipeline_client.h index 36eccb322e7336..0d0e095056d7c0 100644 --- a/chromecast/browser/media/cma_media_pipeline_client.h +++ b/chromecast/browser/media/cma_media_pipeline_client.h @@ -27,13 +27,10 @@ class CmaMediaPipelineClient : public base::RefCounted, // cast::CastResource implementations void ReleaseResource(CastResource::Resource resource) override; - void SetCastResourceClient(CastResource::Client* client) override; protected: ~CmaMediaPipelineClient() override; - CastResource::Client* client_; - private: friend class base::RefCounted; DISALLOW_COPY_AND_ASSIGN(CmaMediaPipelineClient); diff --git a/chromecast/chromecast.gyp b/chromecast/chromecast.gyp index c48d00cf39811a..67aeac1aa62516 100644 --- a/chromecast/chromecast.gyp +++ b/chromecast/chromecast.gyp @@ -82,6 +82,7 @@ 'base/cast_paths.cc', 'base/cast_paths.h', 'base/cast_resource.h', + 'base/cast_resource.cc', 'base/chromecast_config_android.cc', 'base/chromecast_config_android.h', 'base/chromecast_switches.cc',