Add a way for SystemUI to receive media resource (e.g. A/V codec) usage
Bug: 26175834
Change-Id: I45385763b355297d8bfed2d3be7e4e70db86a7fc
diff --git a/services/mediaresourcemanager/ResourceManagerService.cpp b/services/mediaresourcemanager/ResourceManagerService.cpp
index 6781a36..4f99860 100644
--- a/services/mediaresourcemanager/ResourceManagerService.cpp
+++ b/services/mediaresourcemanager/ResourceManagerService.cpp
@@ -19,6 +19,7 @@
#define LOG_TAG "ResourceManagerService"
#include <utils/Log.h>
+#include <binder/IMediaResourceMonitor.h>
#include <binder/IServiceManager.h>
#include <dirent.h>
#include <media/stagefright/ProcessInfo.h>
@@ -89,6 +90,18 @@
return infos.editItemAt(infos.size() - 1);
}
+static void notifyResourceGranted(int pid, const Vector<MediaResource> &resources) {
+ static const char* const kServiceName = "media_resource_monitor";
+ sp<IBinder> binder = defaultServiceManager()->getService(String16(kServiceName));
+ if (binder != NULL) {
+ sp<IMediaResourceMonitor> service = interface_cast<IMediaResourceMonitor>(binder);
+ for (size_t i = 0; i < resources.size(); ++i) {
+ service->notifyResourceGranted(pid, String16(resources[i].mType),
+ String16(resources[i].mSubType), resources[i].mValue);
+ }
+ }
+}
+
status_t ResourceManagerService::dump(int fd, const Vector<String16>& /* args */) {
String8 result;
@@ -197,6 +210,7 @@
ResourceInfo& info = getResourceInfoForEdit(clientId, client, infos);
// TODO: do the merge instead of append.
info.resources.appendVector(resources);
+ notifyResourceGranted(pid, resources);
}
void ResourceManagerService::removeResource(int pid, int64_t clientId) {