| Index: chromecast/base/cast_resource.h
|
| diff --git a/chromecast/base/cast_resource.h b/chromecast/base/cast_resource.h
|
| index cd248d77edc26872e426c5c2a42ef54a2aac1e0a..67315ec392a4d60a09eb3907e6557095c35eee13 100644
|
| --- a/chromecast/base/cast_resource.h
|
| +++ b/chromecast/base/cast_resource.h
|
| @@ -9,7 +9,13 @@
|
|
|
| namespace chromecast {
|
|
|
| -// Interface for resources needed to run application.
|
| +// A CastResource is a user of 1 or more Resources (primary screen, audio,
|
| +// etc). As a user, it is responsible for doing any cast-specific component
|
| +// initialization when the Resources it uses are granted. This initialization
|
| +// is referred to as "acquiring" the Resources. Conversely, when the Resources
|
| +// it uses are revoked, it must deinitialize these cast-specific components.
|
| +// This deinitialization is referred to as "releasing" the Resources.
|
| +// TODO(maclellant): RENAME/DESIGN THIS CLASS IN COMING REFACTOR.
|
| class CastResource {
|
| public:
|
| // Resources necessary to run cast apps. CastResource may contain union of the
|
| @@ -33,11 +39,22 @@ class CastResource {
|
| (kResourceAudio | kResourceScreenPrimary | kResourceScreenSecondary),
|
| };
|
|
|
| + // A Client is responsible for notifying all registered CastResource's when
|
| + // Resources are granted/revoked so that they can acquire/release those
|
| + // Resources. When a CastResource is done acquiring/releasing, it responds
|
| + // to the Client that it has completed. A Client can have multiple registered
|
| + // CastResource's, but each CastResouce has 1 Client that it responds to.
|
| class Client {
|
| public:
|
| - // Called when resource is created. CastResource should not be owned by
|
| - // Client. It can be called from any thread.
|
| - virtual void OnResourceAcquired(CastResource* cast_resource) = 0;
|
| + // Called to register a CastResource with a Client. After registering, a
|
| + // CastResource will start getting notified when to acquire/release
|
| + // Resources. The Client does not take ownership of |cast_resource|. It can
|
| + // be called from any thread.
|
| + virtual void RegisterCastResource(CastResource* cast_resource) = 0;
|
| +
|
| + // TODO(esum): Add OnResourceAcquired() here once AcquireResource is
|
| + // allowed to be asynchronous.
|
| +
|
| // Called when part or all resources are released. It can be called from any
|
| // thread.
|
| // |cast_resource| the CastResource that is released. The pointer may be
|
| @@ -52,7 +69,17 @@ class CastResource {
|
| virtual ~Client() {}
|
| };
|
|
|
| + // Sets the Client for the CastResource to respond to when it is done with
|
| + // Acquire/ReleaseResource.
|
| void SetCastResourceClient(Client* client);
|
| + // Called to acquire resources after OEM has granted them, and before
|
| + // they start getting used by consumers. Implementation must be synchronous
|
| + // since consumers will start using the resource immediately afterwards.
|
| + // TODO(esum): We should allow this method to be asynchronous in case an
|
| + // implementer needs to make expensive calls and doesn't want to block the
|
| + // UI thread (b/26239576). For now, don't do anything expensive in your
|
| + // implementation; if you really need to, then this bug has to be resolved.
|
| + virtual void AcquireResource(Resource resource) = 0;
|
| // Called to release resources. Implementation should call
|
| // Client::OnResourceReleased when resource is released on its side.
|
| virtual void ReleaseResource(Resource resource) = 0;
|
| @@ -61,7 +88,9 @@ class CastResource {
|
| CastResource() : client_(nullptr) {}
|
| virtual ~CastResource() {}
|
|
|
| - void NotifyResourceAcquired();
|
| + // For derived classes to register themselves with their Client through
|
| + // Client::RegisterCastResource.
|
| + void RegisterWithClient();
|
| void NotifyResourceReleased(Resource remain);
|
|
|
| private:
|
|
|