DrmManager: record usage with libmediametrics
Bug: 134789967 Test: dumpsys media.metrics Change-Id: I153244203aef0d8b9034efe4ff26f42028aadd7c
This commit is contained in:
@@ -25,6 +25,7 @@ cc_binary {
|
|||||||
|
|
||||||
shared_libs: [
|
shared_libs: [
|
||||||
"libmedia",
|
"libmedia",
|
||||||
|
"libmediametrics",
|
||||||
"libutils",
|
"libutils",
|
||||||
"liblog",
|
"liblog",
|
||||||
"libbinder",
|
"libbinder",
|
||||||
|
|||||||
@@ -19,7 +19,10 @@
|
|||||||
#include "utils/Log.h"
|
#include "utils/Log.h"
|
||||||
|
|
||||||
#include <utils/String8.h>
|
#include <utils/String8.h>
|
||||||
|
|
||||||
|
#include <binder/IPCThreadState.h>
|
||||||
#include <drm/DrmInfo.h>
|
#include <drm/DrmInfo.h>
|
||||||
|
|
||||||
#include <drm/DrmInfoEvent.h>
|
#include <drm/DrmInfoEvent.h>
|
||||||
#include <drm/DrmRights.h>
|
#include <drm/DrmRights.h>
|
||||||
#include <drm/DrmConstraints.h>
|
#include <drm/DrmConstraints.h>
|
||||||
@@ -28,6 +31,7 @@
|
|||||||
#include <drm/DrmInfoRequest.h>
|
#include <drm/DrmInfoRequest.h>
|
||||||
#include <drm/DrmSupportInfo.h>
|
#include <drm/DrmSupportInfo.h>
|
||||||
#include <drm/DrmConvertedStatus.h>
|
#include <drm/DrmConvertedStatus.h>
|
||||||
|
#include <media/MediaAnalyticsItem.h>
|
||||||
#include <IDrmEngine.h>
|
#include <IDrmEngine.h>
|
||||||
|
|
||||||
#include "DrmManager.h"
|
#include "DrmManager.h"
|
||||||
@@ -50,6 +54,40 @@ DrmManager::~DrmManager() {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void DrmManager::reportEngineMetrics(
|
||||||
|
const char func[], const String8& plugInId, const String8& mimeType) {
|
||||||
|
IDrmEngine& engine = mPlugInManager.getPlugIn(plugInId);
|
||||||
|
|
||||||
|
std::unique_ptr<MediaAnalyticsItem> item(MediaAnalyticsItem::create("drmmanager"));
|
||||||
|
item->generateSessionID();
|
||||||
|
item->setUid(IPCThreadState::self()->getCallingUid());
|
||||||
|
item->setCString("function_name", func);
|
||||||
|
item->setCString("plugin_id", plugInId.getPathLeaf().getBasePath().c_str());
|
||||||
|
|
||||||
|
std::unique_ptr<DrmSupportInfo> info(engine.getSupportInfo(0));
|
||||||
|
if (NULL != info) {
|
||||||
|
item->setCString("description", info->getDescription().c_str());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!mimeType.isEmpty()) {
|
||||||
|
item->setCString("mime_types", mimeType.c_str());
|
||||||
|
} else if (NULL != info) {
|
||||||
|
DrmSupportInfo::MimeTypeIterator mimeIter = info->getMimeTypeIterator();
|
||||||
|
String8 mimes;
|
||||||
|
while (mimeIter.hasNext()) {
|
||||||
|
mimes += mimeIter.next();
|
||||||
|
if (mimeIter.hasNext()) {
|
||||||
|
mimes += ",";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
item->setCString("mime_types", mimes.c_str());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!item->selfrecord()) {
|
||||||
|
ALOGE("Failed to record metrics");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
int DrmManager::addUniqueId(bool isNative) {
|
int DrmManager::addUniqueId(bool isNative) {
|
||||||
Mutex::Autolock _l(mLock);
|
Mutex::Autolock _l(mLock);
|
||||||
|
|
||||||
@@ -147,27 +185,36 @@ void DrmManager::removeClient(int uniqueId) {
|
|||||||
for (size_t index = 0; index < plugInIdList.size(); index++) {
|
for (size_t index = 0; index < plugInIdList.size(); index++) {
|
||||||
IDrmEngine& rDrmEngine = mPlugInManager.getPlugIn(plugInIdList.itemAt(index));
|
IDrmEngine& rDrmEngine = mPlugInManager.getPlugIn(plugInIdList.itemAt(index));
|
||||||
rDrmEngine.terminate(uniqueId);
|
rDrmEngine.terminate(uniqueId);
|
||||||
|
reportEngineMetrics(__func__, plugInIdList[index]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
DrmConstraints* DrmManager::getConstraints(int uniqueId, const String8* path, const int action) {
|
DrmConstraints* DrmManager::getConstraints(int uniqueId, const String8* path, const int action) {
|
||||||
Mutex::Autolock _l(mLock);
|
Mutex::Autolock _l(mLock);
|
||||||
|
DrmConstraints *constraints = NULL;
|
||||||
const String8 plugInId = getSupportedPlugInIdFromPath(uniqueId, *path);
|
const String8 plugInId = getSupportedPlugInIdFromPath(uniqueId, *path);
|
||||||
if (EMPTY_STRING != plugInId) {
|
if (EMPTY_STRING != plugInId) {
|
||||||
IDrmEngine& rDrmEngine = mPlugInManager.getPlugIn(plugInId);
|
IDrmEngine& rDrmEngine = mPlugInManager.getPlugIn(plugInId);
|
||||||
return rDrmEngine.getConstraints(uniqueId, path, action);
|
constraints = rDrmEngine.getConstraints(uniqueId, path, action);
|
||||||
}
|
}
|
||||||
return NULL;
|
if (NULL != constraints) {
|
||||||
|
reportEngineMetrics(__func__, plugInId);
|
||||||
|
}
|
||||||
|
return constraints;
|
||||||
}
|
}
|
||||||
|
|
||||||
DrmMetadata* DrmManager::getMetadata(int uniqueId, const String8* path) {
|
DrmMetadata* DrmManager::getMetadata(int uniqueId, const String8* path) {
|
||||||
Mutex::Autolock _l(mLock);
|
Mutex::Autolock _l(mLock);
|
||||||
|
DrmMetadata *meta = NULL;
|
||||||
const String8 plugInId = getSupportedPlugInIdFromPath(uniqueId, *path);
|
const String8 plugInId = getSupportedPlugInIdFromPath(uniqueId, *path);
|
||||||
if (EMPTY_STRING != plugInId) {
|
if (EMPTY_STRING != plugInId) {
|
||||||
IDrmEngine& rDrmEngine = mPlugInManager.getPlugIn(plugInId);
|
IDrmEngine& rDrmEngine = mPlugInManager.getPlugIn(plugInId);
|
||||||
return rDrmEngine.getMetadata(uniqueId, path);
|
meta = rDrmEngine.getMetadata(uniqueId, path);
|
||||||
}
|
}
|
||||||
return NULL;
|
if (NULL != meta) {
|
||||||
|
reportEngineMetrics(__func__, plugInId);
|
||||||
|
}
|
||||||
|
return meta;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool DrmManager::canHandle(int uniqueId, const String8& path, const String8& mimeType) {
|
bool DrmManager::canHandle(int uniqueId, const String8& path, const String8& mimeType) {
|
||||||
@@ -175,6 +222,10 @@ bool DrmManager::canHandle(int uniqueId, const String8& path, const String8& mim
|
|||||||
const String8 plugInId = getSupportedPlugInId(mimeType);
|
const String8 plugInId = getSupportedPlugInId(mimeType);
|
||||||
bool result = (EMPTY_STRING != plugInId) ? true : false;
|
bool result = (EMPTY_STRING != plugInId) ? true : false;
|
||||||
|
|
||||||
|
if (result) {
|
||||||
|
reportEngineMetrics(__func__, plugInId, mimeType);
|
||||||
|
}
|
||||||
|
|
||||||
if (0 < path.length()) {
|
if (0 < path.length()) {
|
||||||
if (result) {
|
if (result) {
|
||||||
IDrmEngine& rDrmEngine = mPlugInManager.getPlugIn(plugInId);
|
IDrmEngine& rDrmEngine = mPlugInManager.getPlugIn(plugInId);
|
||||||
@@ -191,12 +242,17 @@ bool DrmManager::canHandle(int uniqueId, const String8& path, const String8& mim
|
|||||||
|
|
||||||
DrmInfoStatus* DrmManager::processDrmInfo(int uniqueId, const DrmInfo* drmInfo) {
|
DrmInfoStatus* DrmManager::processDrmInfo(int uniqueId, const DrmInfo* drmInfo) {
|
||||||
Mutex::Autolock _l(mLock);
|
Mutex::Autolock _l(mLock);
|
||||||
const String8 plugInId = getSupportedPlugInId(drmInfo->getMimeType());
|
DrmInfoStatus *infoStatus = NULL;
|
||||||
|
const String8 mimeType = drmInfo->getMimeType();
|
||||||
|
const String8 plugInId = getSupportedPlugInId(mimeType);
|
||||||
if (EMPTY_STRING != plugInId) {
|
if (EMPTY_STRING != plugInId) {
|
||||||
IDrmEngine& rDrmEngine = mPlugInManager.getPlugIn(plugInId);
|
IDrmEngine& rDrmEngine = mPlugInManager.getPlugIn(plugInId);
|
||||||
return rDrmEngine.processDrmInfo(uniqueId, drmInfo);
|
infoStatus = rDrmEngine.processDrmInfo(uniqueId, drmInfo);
|
||||||
}
|
}
|
||||||
return NULL;
|
if (NULL != infoStatus) {
|
||||||
|
reportEngineMetrics(__func__, plugInId, mimeType);
|
||||||
|
}
|
||||||
|
return infoStatus;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool DrmManager::canHandle(int uniqueId, const String8& path) {
|
bool DrmManager::canHandle(int uniqueId, const String8& path) {
|
||||||
@@ -208,6 +264,7 @@ bool DrmManager::canHandle(int uniqueId, const String8& path) {
|
|||||||
result = rDrmEngine.canHandle(uniqueId, path);
|
result = rDrmEngine.canHandle(uniqueId, path);
|
||||||
|
|
||||||
if (result) {
|
if (result) {
|
||||||
|
reportEngineMetrics(__func__, plugInPathList[i]);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -216,54 +273,75 @@ bool DrmManager::canHandle(int uniqueId, const String8& path) {
|
|||||||
|
|
||||||
DrmInfo* DrmManager::acquireDrmInfo(int uniqueId, const DrmInfoRequest* drmInfoRequest) {
|
DrmInfo* DrmManager::acquireDrmInfo(int uniqueId, const DrmInfoRequest* drmInfoRequest) {
|
||||||
Mutex::Autolock _l(mLock);
|
Mutex::Autolock _l(mLock);
|
||||||
const String8 plugInId = getSupportedPlugInId(drmInfoRequest->getMimeType());
|
DrmInfo *info = NULL;
|
||||||
|
const String8 mimeType = drmInfoRequest->getMimeType();
|
||||||
|
const String8 plugInId = getSupportedPlugInId(mimeType);
|
||||||
if (EMPTY_STRING != plugInId) {
|
if (EMPTY_STRING != plugInId) {
|
||||||
IDrmEngine& rDrmEngine = mPlugInManager.getPlugIn(plugInId);
|
IDrmEngine& rDrmEngine = mPlugInManager.getPlugIn(plugInId);
|
||||||
return rDrmEngine.acquireDrmInfo(uniqueId, drmInfoRequest);
|
info = rDrmEngine.acquireDrmInfo(uniqueId, drmInfoRequest);
|
||||||
}
|
}
|
||||||
return NULL;
|
if (NULL != info) {
|
||||||
|
reportEngineMetrics(__func__, plugInId, mimeType);
|
||||||
|
}
|
||||||
|
return info;
|
||||||
}
|
}
|
||||||
|
|
||||||
status_t DrmManager::saveRights(int uniqueId, const DrmRights& drmRights,
|
status_t DrmManager::saveRights(int uniqueId, const DrmRights& drmRights,
|
||||||
const String8& rightsPath, const String8& contentPath) {
|
const String8& rightsPath, const String8& contentPath) {
|
||||||
Mutex::Autolock _l(mLock);
|
Mutex::Autolock _l(mLock);
|
||||||
const String8 plugInId = getSupportedPlugInId(drmRights.getMimeType());
|
const String8 mimeType = drmRights.getMimeType();
|
||||||
|
const String8 plugInId = getSupportedPlugInId(mimeType);
|
||||||
status_t result = DRM_ERROR_UNKNOWN;
|
status_t result = DRM_ERROR_UNKNOWN;
|
||||||
if (EMPTY_STRING != plugInId) {
|
if (EMPTY_STRING != plugInId) {
|
||||||
IDrmEngine& rDrmEngine = mPlugInManager.getPlugIn(plugInId);
|
IDrmEngine& rDrmEngine = mPlugInManager.getPlugIn(plugInId);
|
||||||
result = rDrmEngine.saveRights(uniqueId, drmRights, rightsPath, contentPath);
|
result = rDrmEngine.saveRights(uniqueId, drmRights, rightsPath, contentPath);
|
||||||
}
|
}
|
||||||
|
if (DRM_NO_ERROR == result) {
|
||||||
|
reportEngineMetrics(__func__, plugInId, mimeType);
|
||||||
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
String8 DrmManager::getOriginalMimeType(int uniqueId, const String8& path, int fd) {
|
String8 DrmManager::getOriginalMimeType(int uniqueId, const String8& path, int fd) {
|
||||||
Mutex::Autolock _l(mLock);
|
Mutex::Autolock _l(mLock);
|
||||||
|
String8 mimeType(EMPTY_STRING);
|
||||||
const String8 plugInId = getSupportedPlugInIdFromPath(uniqueId, path);
|
const String8 plugInId = getSupportedPlugInIdFromPath(uniqueId, path);
|
||||||
if (EMPTY_STRING != plugInId) {
|
if (EMPTY_STRING != plugInId) {
|
||||||
IDrmEngine& rDrmEngine = mPlugInManager.getPlugIn(plugInId);
|
IDrmEngine& rDrmEngine = mPlugInManager.getPlugIn(plugInId);
|
||||||
return rDrmEngine.getOriginalMimeType(uniqueId, path, fd);
|
mimeType = rDrmEngine.getOriginalMimeType(uniqueId, path, fd);
|
||||||
}
|
}
|
||||||
return EMPTY_STRING;
|
if (!mimeType.isEmpty()) {
|
||||||
|
reportEngineMetrics(__func__, plugInId, mimeType);
|
||||||
|
}
|
||||||
|
return mimeType;
|
||||||
}
|
}
|
||||||
|
|
||||||
int DrmManager::getDrmObjectType(int uniqueId, const String8& path, const String8& mimeType) {
|
int DrmManager::getDrmObjectType(int uniqueId, const String8& path, const String8& mimeType) {
|
||||||
Mutex::Autolock _l(mLock);
|
Mutex::Autolock _l(mLock);
|
||||||
|
int type = DrmObjectType::UNKNOWN;
|
||||||
const String8 plugInId = getSupportedPlugInId(uniqueId, path, mimeType);
|
const String8 plugInId = getSupportedPlugInId(uniqueId, path, mimeType);
|
||||||
if (EMPTY_STRING != plugInId) {
|
if (EMPTY_STRING != plugInId) {
|
||||||
IDrmEngine& rDrmEngine = mPlugInManager.getPlugIn(plugInId);
|
IDrmEngine& rDrmEngine = mPlugInManager.getPlugIn(plugInId);
|
||||||
return rDrmEngine.getDrmObjectType(uniqueId, path, mimeType);
|
type = rDrmEngine.getDrmObjectType(uniqueId, path, mimeType);
|
||||||
}
|
}
|
||||||
return DrmObjectType::UNKNOWN;
|
if (DrmObjectType::UNKNOWN != type) {
|
||||||
|
reportEngineMetrics(__func__, plugInId, mimeType);
|
||||||
|
}
|
||||||
|
return type;
|
||||||
}
|
}
|
||||||
|
|
||||||
int DrmManager::checkRightsStatus(int uniqueId, const String8& path, int action) {
|
int DrmManager::checkRightsStatus(int uniqueId, const String8& path, int action) {
|
||||||
Mutex::Autolock _l(mLock);
|
Mutex::Autolock _l(mLock);
|
||||||
|
int rightsStatus = RightsStatus::RIGHTS_INVALID;
|
||||||
const String8 plugInId = getSupportedPlugInIdFromPath(uniqueId, path);
|
const String8 plugInId = getSupportedPlugInIdFromPath(uniqueId, path);
|
||||||
if (EMPTY_STRING != plugInId) {
|
if (EMPTY_STRING != plugInId) {
|
||||||
IDrmEngine& rDrmEngine = mPlugInManager.getPlugIn(plugInId);
|
IDrmEngine& rDrmEngine = mPlugInManager.getPlugIn(plugInId);
|
||||||
return rDrmEngine.checkRightsStatus(uniqueId, path, action);
|
rightsStatus = rDrmEngine.checkRightsStatus(uniqueId, path, action);
|
||||||
}
|
}
|
||||||
return RightsStatus::RIGHTS_INVALID;
|
if (RightsStatus::RIGHTS_INVALID != rightsStatus) {
|
||||||
|
reportEngineMetrics(__func__, plugInId);
|
||||||
|
}
|
||||||
|
return rightsStatus;
|
||||||
}
|
}
|
||||||
|
|
||||||
status_t DrmManager::consumeRights(
|
status_t DrmManager::consumeRights(
|
||||||
@@ -307,6 +385,9 @@ status_t DrmManager::removeRights(int uniqueId, const String8& path) {
|
|||||||
IDrmEngine& rDrmEngine = mPlugInManager.getPlugIn(plugInId);
|
IDrmEngine& rDrmEngine = mPlugInManager.getPlugIn(plugInId);
|
||||||
result = rDrmEngine.removeRights(uniqueId, path);
|
result = rDrmEngine.removeRights(uniqueId, path);
|
||||||
}
|
}
|
||||||
|
if (DRM_NO_ERROR == result) {
|
||||||
|
reportEngineMetrics(__func__, plugInId);
|
||||||
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -319,6 +400,7 @@ status_t DrmManager::removeAllRights(int uniqueId) {
|
|||||||
if (DRM_NO_ERROR != result) {
|
if (DRM_NO_ERROR != result) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
reportEngineMetrics(__func__, plugInIdList[index]);
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
@@ -335,6 +417,7 @@ int DrmManager::openConvertSession(int uniqueId, const String8& mimeType) {
|
|||||||
++mConvertId;
|
++mConvertId;
|
||||||
convertId = mConvertId;
|
convertId = mConvertId;
|
||||||
mConvertSessionMap.add(convertId, &rDrmEngine);
|
mConvertSessionMap.add(convertId, &rDrmEngine);
|
||||||
|
reportEngineMetrics(__func__, plugInId, mimeType);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return convertId;
|
return convertId;
|
||||||
@@ -415,6 +498,7 @@ sp<DecryptHandle> DrmManager::openDecryptSession(
|
|||||||
if (DRM_NO_ERROR == result) {
|
if (DRM_NO_ERROR == result) {
|
||||||
++mDecryptSessionId;
|
++mDecryptSessionId;
|
||||||
mDecryptSessionMap.add(mDecryptSessionId, &rDrmEngine);
|
mDecryptSessionMap.add(mDecryptSessionId, &rDrmEngine);
|
||||||
|
reportEngineMetrics(__func__, plugInId, String8(mime));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -443,6 +527,7 @@ sp<DecryptHandle> DrmManager::openDecryptSession(
|
|||||||
if (DRM_NO_ERROR == result) {
|
if (DRM_NO_ERROR == result) {
|
||||||
++mDecryptSessionId;
|
++mDecryptSessionId;
|
||||||
mDecryptSessionMap.add(mDecryptSessionId, &rDrmEngine);
|
mDecryptSessionMap.add(mDecryptSessionId, &rDrmEngine);
|
||||||
|
reportEngineMetrics(__func__, plugInId, String8(mime));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -472,6 +557,7 @@ sp<DecryptHandle> DrmManager::openDecryptSession(
|
|||||||
if (DRM_NO_ERROR == result) {
|
if (DRM_NO_ERROR == result) {
|
||||||
++mDecryptSessionId;
|
++mDecryptSessionId;
|
||||||
mDecryptSessionMap.add(mDecryptSessionId, &rDrmEngine);
|
mDecryptSessionMap.add(mDecryptSessionId, &rDrmEngine);
|
||||||
|
reportEngineMetrics(__func__, plugInId, mimeType);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -143,6 +143,9 @@ private:
|
|||||||
|
|
||||||
bool canHandle(int uniqueId, const String8& path);
|
bool canHandle(int uniqueId, const String8& path);
|
||||||
|
|
||||||
|
void reportEngineMetrics(const char func[],
|
||||||
|
const String8& plugInId, const String8& mimeType = String8(""));
|
||||||
|
|
||||||
private:
|
private:
|
||||||
enum {
|
enum {
|
||||||
kMaxNumUniqueIds = 0x1000,
|
kMaxNumUniqueIds = 0x1000,
|
||||||
|
|||||||
Reference in New Issue
Block a user