Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 76c2f9e3 authored by Sohail Nagaraj's avatar Sohail Nagaraj
Browse files

Translate error code & security level in DrmMetricsLogger

Bug: 271138247

Test: gts-tradefed run gts --abi arm64-v8a -m GtsMediaTestCases
Test: atest CtsMediaDrmFrameworkTestCases

Change-Id: I51a802d8e41ec1ede09d1bd56d027ef0c944488f
parent 4a7bb7b4
Loading
Loading
Loading
Loading
+71 −4
Original line number Diff line number Diff line
@@ -41,6 +41,70 @@ DrmMetricsLogger::DrmMetricsLogger(IDrmFrontend frontend)

DrmMetricsLogger::~DrmMetricsLogger() {}

int MediaErrorToJavaError(status_t err) {
#define STATUS_CASE(status) \
    case status: \
        return J##status

    switch (err) {
        STATUS_CASE(ERROR_DRM_UNKNOWN);
        STATUS_CASE(ERROR_DRM_NO_LICENSE);
        STATUS_CASE(ERROR_DRM_LICENSE_EXPIRED);
        STATUS_CASE(ERROR_DRM_RESOURCE_BUSY);
        STATUS_CASE(ERROR_DRM_INSUFFICIENT_OUTPUT_PROTECTION);
        STATUS_CASE(ERROR_DRM_SESSION_NOT_OPENED);
        STATUS_CASE(ERROR_DRM_CANNOT_HANDLE);
        STATUS_CASE(ERROR_DRM_INSUFFICIENT_SECURITY);
        STATUS_CASE(ERROR_DRM_FRAME_TOO_LARGE);
        STATUS_CASE(ERROR_DRM_SESSION_LOST_STATE);
        STATUS_CASE(ERROR_DRM_CERTIFICATE_MALFORMED);
        STATUS_CASE(ERROR_DRM_CERTIFICATE_MISSING);
        STATUS_CASE(ERROR_DRM_CRYPTO_LIBRARY);
        STATUS_CASE(ERROR_DRM_GENERIC_OEM);
        STATUS_CASE(ERROR_DRM_GENERIC_PLUGIN);
        STATUS_CASE(ERROR_DRM_INIT_DATA);
        STATUS_CASE(ERROR_DRM_KEY_NOT_LOADED);
        STATUS_CASE(ERROR_DRM_LICENSE_PARSE);
        STATUS_CASE(ERROR_DRM_LICENSE_POLICY);
        STATUS_CASE(ERROR_DRM_LICENSE_RELEASE);
        STATUS_CASE(ERROR_DRM_LICENSE_REQUEST_REJECTED);
        STATUS_CASE(ERROR_DRM_LICENSE_RESTORE);
        STATUS_CASE(ERROR_DRM_LICENSE_STATE);
        STATUS_CASE(ERROR_DRM_MEDIA_FRAMEWORK);
        STATUS_CASE(ERROR_DRM_PROVISIONING_CERTIFICATE);
        STATUS_CASE(ERROR_DRM_PROVISIONING_CONFIG);
        STATUS_CASE(ERROR_DRM_PROVISIONING_PARSE);
        STATUS_CASE(ERROR_DRM_PROVISIONING_REQUEST_REJECTED);
        STATUS_CASE(ERROR_DRM_PROVISIONING_RETRY);
        STATUS_CASE(ERROR_DRM_RESOURCE_CONTENTION);
        STATUS_CASE(ERROR_DRM_SECURE_STOP_RELEASE);
        STATUS_CASE(ERROR_DRM_STORAGE_READ);
        STATUS_CASE(ERROR_DRM_STORAGE_WRITE);
        STATUS_CASE(ERROR_DRM_ZERO_SUBSAMPLES);
#undef STATUS_CASE
    }
    return static_cast<int>(err);
}

int DrmPluginSecurityLevelToJavaSecurityLevel(DrmPlugin::SecurityLevel securityLevel) {
#define STATUS_CASE(status) \
    case DrmPlugin::k##status: \
        return J##status

    switch (securityLevel) {
        STATUS_CASE(SecurityLevelUnknown);
        STATUS_CASE(SecurityLevelSwSecureCrypto);
        STATUS_CASE(SecurityLevelSwSecureDecode);
        STATUS_CASE(SecurityLevelHwSecureCrypto);
        STATUS_CASE(SecurityLevelHwSecureDecode);
        STATUS_CASE(SecurityLevelHwSecureAll);
        STATUS_CASE(SecurityLevelMax);
#undef STATUS_CASE
    }
    return static_cast<int>(securityLevel);
}


DrmStatus DrmMetricsLogger::initCheck() const {
    DrmStatus status = mImpl->initCheck();
    if (status != OK) {
@@ -481,8 +545,10 @@ void DrmMetricsLogger::reportMediaDrmSessionOpened(const std::vector<uint8_t>& s
    auto it = mSessionMap.find(sessionId);
    if (it != mSessionMap.end()) {
        mediametrics_setCString(handle, "session_nonce", it->second.mNonce.c_str());
        mediametrics_setInt64(handle, "requested_seucrity_level", it->second.mTargetSecurityLevel);
        mediametrics_setInt64(handle, "opened_seucrity_level", it->second.mActualSecurityLevel);
        mediametrics_setInt32(handle, "requested_security_level",
                    DrmPluginSecurityLevelToJavaSecurityLevel(it->second.mTargetSecurityLevel));
        mediametrics_setInt32(handle, "opened_security_level",
                    DrmPluginSecurityLevelToJavaSecurityLevel(it->second.mActualSecurityLevel));
    }
    mediametrics_selfRecord(handle);
    mediametrics_delete(handle);
@@ -501,11 +567,12 @@ void DrmMetricsLogger::reportMediaDrmErrored(const DrmStatus& error_code, const
        auto it = mSessionMap.find(sessionId);
        if (it != mSessionMap.end()) {
            mediametrics_setCString(handle, "session_nonce", it->second.mNonce.c_str());
            mediametrics_setInt64(handle, "seucrity_level", it->second.mActualSecurityLevel);
            mediametrics_setInt32(handle, "security_level",
                        DrmPluginSecurityLevelToJavaSecurityLevel(it->second.mActualSecurityLevel));
        }
    }
    mediametrics_setCString(handle, "api", api);
    mediametrics_setInt32(handle, "error_code", error_code);
    mediametrics_setInt32(handle, "error_code", MediaErrorToJavaError(error_code));
    mediametrics_setInt32(handle, "cdm_err", error_code.getCdmErr());
    mediametrics_setInt32(handle, "oem_err", error_code.getOemErr());
    mediametrics_setInt32(handle, "error_context", error_code.getContext());
+48 −1
Original line number Diff line number Diff line
@@ -25,9 +25,56 @@

namespace android {

enum {
    JERROR_DRM_UNKNOWN = 0,
    JERROR_DRM_NO_LICENSE = 1,
    JERROR_DRM_LICENSE_EXPIRED = 2,
    JERROR_DRM_RESOURCE_BUSY = 3,
    JERROR_DRM_INSUFFICIENT_OUTPUT_PROTECTION = 4,
    JERROR_DRM_SESSION_NOT_OPENED = 5,
    JERROR_DRM_CANNOT_HANDLE = 6,
    JERROR_DRM_INSUFFICIENT_SECURITY = 7,
    JERROR_DRM_FRAME_TOO_LARGE = 8,
    JERROR_DRM_SESSION_LOST_STATE = 9,
    JERROR_DRM_CERTIFICATE_MALFORMED = 10,
    JERROR_DRM_CERTIFICATE_MISSING = 11,
    JERROR_DRM_CRYPTO_LIBRARY = 12,
    JERROR_DRM_GENERIC_OEM = 13,
    JERROR_DRM_GENERIC_PLUGIN = 14,
    JERROR_DRM_INIT_DATA = 15,
    JERROR_DRM_KEY_NOT_LOADED = 16,
    JERROR_DRM_LICENSE_PARSE = 17,
    JERROR_DRM_LICENSE_POLICY = 18,
    JERROR_DRM_LICENSE_RELEASE = 19,
    JERROR_DRM_LICENSE_REQUEST_REJECTED = 20,
    JERROR_DRM_LICENSE_RESTORE = 21,
    JERROR_DRM_LICENSE_STATE = 22,
    JERROR_DRM_MEDIA_FRAMEWORK = 23,
    JERROR_DRM_PROVISIONING_CERTIFICATE = 24,
    JERROR_DRM_PROVISIONING_CONFIG = 25,
    JERROR_DRM_PROVISIONING_PARSE = 26,
    JERROR_DRM_PROVISIONING_REQUEST_REJECTED = 27,
    JERROR_DRM_PROVISIONING_RETRY = 28,
    JERROR_DRM_RESOURCE_CONTENTION = 29,
    JERROR_DRM_SECURE_STOP_RELEASE = 30,
    JERROR_DRM_STORAGE_READ = 31,
    JERROR_DRM_STORAGE_WRITE = 32,
    JERROR_DRM_ZERO_SUBSAMPLES = 33,
};

enum {
    JSecurityLevelUnknown = 0,
    JSecurityLevelSwSecureCrypto = 1,
    JSecurityLevelSwSecureDecode = 2,
    JSecurityLevelHwSecureCrypto = 3,
    JSecurityLevelHwSecureDecode = 4,
    JSecurityLevelHwSecureAll = 5,
    JSecurityLevelMax = 6,
};

struct SessionContext {
    std::string mNonce;
    int64_t mTargetSecurityLevel;
    DrmPlugin::SecurityLevel mTargetSecurityLevel;
    DrmPlugin::SecurityLevel mActualSecurityLevel;
};