diff options
author | Ronghua Wu <ronghuawu@google.com> | 2015-04-24 21:35:37 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2015-04-24 21:35:38 +0000 |
commit | 21db57282da8b3daba1549f3a8e41c4fbaf80059 (patch) | |
tree | 2c51b5f8ffe7015ffdc3fdaf19bd36982546bf89 | |
parent | 7d7ea036436320b03bef826d78c4c035b67edbd0 (diff) | |
parent | 8f9dd872366f54b6260506c75c3d0cc3f9f73f81 (diff) | |
download | frameworks_av-21db57282da8b3daba1549f3a8e41c4fbaf80059.zip frameworks_av-21db57282da8b3daba1549f3a8e41c4fbaf80059.tar.gz frameworks_av-21db57282da8b3daba1549f3a8e41c4fbaf80059.tar.bz2 |
Merge "mediaresourcemanager: add dumpsys support."
-rw-r--r-- | include/media/IResourceManagerClient.h | 2 | ||||
-rw-r--r-- | media/libmedia/IResourceManagerClient.cpp | 20 | ||||
-rw-r--r-- | media/libstagefright/MediaCodec.cpp | 15 | ||||
-rw-r--r-- | services/mediaresourcemanager/ResourceManagerService.cpp | 45 | ||||
-rw-r--r-- | services/mediaresourcemanager/ResourceManagerService.h | 2 | ||||
-rw-r--r-- | services/mediaresourcemanager/test/ResourceManagerService_test.cpp | 4 |
6 files changed, 88 insertions, 0 deletions
diff --git a/include/media/IResourceManagerClient.h b/include/media/IResourceManagerClient.h index 3587aea..aa0cd88 100644 --- a/include/media/IResourceManagerClient.h +++ b/include/media/IResourceManagerClient.h @@ -18,6 +18,7 @@ #define ANDROID_IRESOURCEMANAGERCLIENT_H #include <utils/RefBase.h> +#include <utils/String8.h> #include <binder/IInterface.h> #include <binder/Parcel.h> @@ -29,6 +30,7 @@ public: DECLARE_META_INTERFACE(ResourceManagerClient); virtual bool reclaimResource() = 0; + virtual String8 getName() = 0; }; // ---------------------------------------------------------------------------- diff --git a/media/libmedia/IResourceManagerClient.cpp b/media/libmedia/IResourceManagerClient.cpp index 6fa56fc..b3f56e8 100644 --- a/media/libmedia/IResourceManagerClient.cpp +++ b/media/libmedia/IResourceManagerClient.cpp @@ -25,6 +25,7 @@ namespace android { enum { RECLAIM_RESOURCE = IBinder::FIRST_CALL_TRANSACTION, + GET_NAME, }; class BpResourceManagerClient: public BpInterface<IResourceManagerClient> @@ -46,6 +47,19 @@ public: } return ret; } + + virtual String8 getName() { + Parcel data, reply; + data.writeInterfaceToken(IResourceManagerClient::getInterfaceDescriptor()); + + String8 ret; + status_t status = remote()->transact(GET_NAME, data, &reply); + if (status == NO_ERROR) { + ret = reply.readString8(); + } + return ret; + } + }; IMPLEMENT_META_INTERFACE(ResourceManagerClient, "android.media.IResourceManagerClient"); @@ -62,6 +76,12 @@ status_t BnResourceManagerClient::onTransact( reply->writeInt32(ret); return NO_ERROR; } break; + case GET_NAME: { + CHECK_INTERFACE(IResourceManagerClient, data, reply); + String8 ret = getName(); + reply->writeString8(ret); + return NO_ERROR; + } break; default: return BBinder::onTransact(code, data, reply, flags); } diff --git a/media/libstagefright/MediaCodec.cpp b/media/libstagefright/MediaCodec.cpp index 96b22c0..7065a6e 100644 --- a/media/libstagefright/MediaCodec.cpp +++ b/media/libstagefright/MediaCodec.cpp @@ -79,6 +79,21 @@ struct ResourceManagerClient : public BnResourceManagerClient { return (err == OK); } + virtual String8 getName() { + String8 ret; + sp<MediaCodec> codec = mMediaCodec.promote(); + if (codec == NULL) { + // codec is already gone. + return ret; + } + + AString name; + if (codec->getName(&name) == OK) { + ret.setTo(name.c_str()); + } + return ret; + } + protected: virtual ~ResourceManagerClient() {} diff --git a/services/mediaresourcemanager/ResourceManagerService.cpp b/services/mediaresourcemanager/ResourceManagerService.cpp index 75a69ed..17aac4e 100644 --- a/services/mediaresourcemanager/ResourceManagerService.cpp +++ b/services/mediaresourcemanager/ResourceManagerService.cpp @@ -88,6 +88,51 @@ static ResourceInfo& getResourceInfoForEdit( return infos.editItemAt(infos.size() - 1); } +status_t ResourceManagerService::dump(int fd, const Vector<String16>& args) { + Mutex::Autolock lock(mLock); + + String8 result; + const size_t SIZE = 256; + char buffer[SIZE]; + + snprintf(buffer, SIZE, "ResourceManagerService: %p\n", this); + result.append(buffer); + result.append(" Policies:\n"); + snprintf(buffer, SIZE, " SupportsMultipleSecureCodecs: %d\n", mSupportsMultipleSecureCodecs); + result.append(buffer); + snprintf(buffer, SIZE, " SupportsSecureWithNonSecureCodec: %d\n", mSupportsSecureWithNonSecureCodec); + result.append(buffer); + + snprintf(buffer, SIZE, " Processes:\n"); + result.append(buffer); + for (size_t i = 0; i < mMap.size(); ++i) { + snprintf(buffer, SIZE, " Pid: %d\n", mMap.keyAt(i)); + result.append(buffer); + + const ResourceInfos &infos = mMap.valueAt(i); + for (size_t j = 0; j < infos.size(); ++j) { + snprintf(buffer, SIZE, " Client:\n"); + result.append(buffer); + snprintf(buffer, SIZE, " Id: %lld\n", (long long)infos[j].clientId); + result.append(buffer); + + snprintf(buffer, SIZE, " Name: %s\n", infos[j].client->getName().string()); + result.append(buffer); + + Vector<MediaResource> resources = infos[j].resources; + snprintf(buffer, SIZE, " Resources:\n"); + result.append(buffer); + for (size_t k = 0; k < resources.size(); ++k) { + snprintf(buffer, SIZE, " %s\n", resources[k].toString().string()); + result.append(buffer); + } + } + } + + write(fd, result.string(), result.size()); + return OK; +} + ResourceManagerService::ResourceManagerService() : mProcessInfo(new ProcessInfo()), mSupportsMultipleSecureCodecs(true), diff --git a/services/mediaresourcemanager/ResourceManagerService.h b/services/mediaresourcemanager/ResourceManagerService.h index 2ed9bf8..0c3d694 100644 --- a/services/mediaresourcemanager/ResourceManagerService.h +++ b/services/mediaresourcemanager/ResourceManagerService.h @@ -48,6 +48,8 @@ class ResourceManagerService public: static char const *getServiceName() { return "media.resource_manager"; } + virtual status_t dump(int fd, const Vector<String16>& args); + ResourceManagerService(); ResourceManagerService(sp<ProcessInfoInterface> processInfo); diff --git a/services/mediaresourcemanager/test/ResourceManagerService_test.cpp b/services/mediaresourcemanager/test/ResourceManagerService_test.cpp index 48d1395..bccc7fa 100644 --- a/services/mediaresourcemanager/test/ResourceManagerService_test.cpp +++ b/services/mediaresourcemanager/test/ResourceManagerService_test.cpp @@ -55,6 +55,10 @@ struct TestClient : public BnResourceManagerClient { return true; } + virtual String8 getName() { + return String8("test_client"); + } + bool reclaimed() const { return mReclaimed; } |