diff options
Diffstat (limited to 'services/mediaresourcemanager/ResourceManagerService.h')
| -rw-r--r-- | services/mediaresourcemanager/ResourceManagerService.h | 106 | 
1 files changed, 106 insertions, 0 deletions
diff --git a/services/mediaresourcemanager/ResourceManagerService.h b/services/mediaresourcemanager/ResourceManagerService.h new file mode 100644 index 0000000..2ed9bf8 --- /dev/null +++ b/services/mediaresourcemanager/ResourceManagerService.h @@ -0,0 +1,106 @@ +/* +** +** Copyright 2015, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +**     http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + +#ifndef ANDROID_RESOURCEMANAGERSERVICE_H +#define ANDROID_RESOURCEMANAGERSERVICE_H + +#include <arpa/inet.h> +#include <binder/BinderService.h> +#include <utils/Errors.h> +#include <utils/KeyedVector.h> +#include <utils/String8.h> +#include <utils/threads.h> +#include <utils/Vector.h> + +#include <media/IResourceManagerService.h> + +namespace android { + +struct ProcessInfoInterface; + +struct ResourceInfo { +    int64_t clientId; +    sp<IResourceManagerClient> client; +    Vector<MediaResource> resources; +}; + +typedef Vector<ResourceInfo> ResourceInfos; +typedef KeyedVector<int, ResourceInfos> PidResourceInfosMap; + +class ResourceManagerService +    : public BinderService<ResourceManagerService>, +      public BnResourceManagerService +{ +public: +    static char const *getServiceName() { return "media.resource_manager"; } + +    ResourceManagerService(); +    ResourceManagerService(sp<ProcessInfoInterface> processInfo); + +    // IResourceManagerService interface +    virtual void config(const Vector<MediaResourcePolicy> &policies); + +    virtual void addResource( +            int pid, +            int64_t clientId, +            const sp<IResourceManagerClient> client, +            const Vector<MediaResource> &resources); + +    virtual void removeResource(int64_t clientId); + +    virtual bool reclaimResource(int callingPid, const Vector<MediaResource> &resources); + +protected: +    virtual ~ResourceManagerService(); + +private: +    friend class ResourceManagerServiceTest; + +    // Gets the list of all the clients who own the specified resource type. +    // Returns false if any client belongs to a process with higher priority than the +    // calling process. The clients will remain unchanged if returns false. +    bool getAllClients_l(int callingPid, const String8 &type, +            Vector<sp<IResourceManagerClient>> *clients); + +    // Gets the client who owns specified resource type from lowest possible priority process. +    // Returns false if the calling process priority is not higher than the lowest process +    // priority. The client will remain unchanged if returns false. +    bool getLowestPriorityBiggestClient_l(int callingPid, const String8 &type, +            sp<IResourceManagerClient> *client); + +    // Gets lowest priority process that has the specified resource type. +    // Returns false if failed. The output parameters will remain unchanged if failed. +    bool getLowestPriorityPid_l(const String8 &type, int *pid, int *priority); + +    // Gets the client who owns biggest piece of specified resource type from pid. +    // Returns false if failed. The client will remain unchanged if failed. +    bool getBiggestClient_l(int pid, const String8 &type, sp<IResourceManagerClient> *client); + +    bool isCallingPriorityHigher_l(int callingPid, int pid); + +    mutable Mutex mLock; +    sp<ProcessInfoInterface> mProcessInfo; +    PidResourceInfosMap mMap; +    bool mSupportsMultipleSecureCodecs; +    bool mSupportsSecureWithNonSecureCodec; +}; + +// ---------------------------------------------------------------------------- + +}; // namespace android + +#endif // ANDROID_RESOURCEMANAGERSERVICE_H  | 
