Skip to content

Commit

Permalink
[Chromecast] CastResource::Client inside CastResource
Browse files Browse the repository at this point in the history
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}
  • Loading branch information
yucliu authored and Commit bot committed Sep 29, 2015
1 parent 45d7e93 commit 62a50b5
Show file tree
Hide file tree
Showing 6 changed files with 37 additions and 20 deletions.
1 change: 1 addition & 0 deletions chromecast/base/BUILD.gn
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand Down
23 changes: 23 additions & 0 deletions chromecast/base/cast_resource.cc
Original file line number Diff line number Diff line change
@@ -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
10 changes: 7 additions & 3 deletions chromecast/base/cast_resource.h
Original file line number Diff line number Diff line change
Expand Up @@ -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);
};

Expand Down
19 changes: 5 additions & 14 deletions chromecast/browser/media/cma_media_pipeline_client.cc
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
namespace chromecast {
namespace media {

CmaMediaPipelineClient::CmaMediaPipelineClient() : client_(nullptr) {}
CmaMediaPipelineClient::CmaMediaPipelineClient() {}

CmaMediaPipelineClient::~CmaMediaPipelineClient() {}

Expand All @@ -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) {
Expand All @@ -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
Expand Down
3 changes: 0 additions & 3 deletions chromecast/browser/media/cma_media_pipeline_client.h
Original file line number Diff line number Diff line change
Expand Up @@ -27,13 +27,10 @@ class CmaMediaPipelineClient : public base::RefCounted<CmaMediaPipelineClient>,

// 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<CmaMediaPipelineClient>;
DISALLOW_COPY_AND_ASSIGN(CmaMediaPipelineClient);
Expand Down
1 change: 1 addition & 0 deletions chromecast/chromecast.gyp
Original file line number Diff line number Diff line change
Expand Up @@ -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',
Expand Down

0 comments on commit 62a50b5

Please sign in to comment.