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

Commit ab394d13 authored by Adam Stone's avatar Adam Stone
Browse files

Add support for getMetrics to IDrm

Adds support for the new getMetrics call to the IDrm interface and the
DrmHal implementation. The implementation currently returns a dummy
metric collection. Follow-up CLs will flesh out the implementation.

Bug: 64001676

Test: Ran the new unit test created in a related CL; ran Google Play.
Change-Id: Ia6a3af5b59a30ca55267f7e3ba278a510fc8c81e
parent 0b68d531
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -838,6 +838,11 @@ status_t DrmHal::setPropertyByteArray(String8 const &name,
    return toStatusT(status);
}

status_t DrmHal::getMetrics(MediaAnalyticsItem* metrics) {
    // TODO: Replace this with real metrics.
    metrics->setCString("/drm/mediadrm/dummymetric", "dummy");
    return OK;
}

status_t DrmHal::setCipherAlgorithm(Vector<uint8_t> const &sessionId,
                                 String8 const &algorithm) {
@@ -1030,6 +1035,7 @@ void DrmHal::writeByteArray(Parcel &obj, hidl_vec<uint8_t> const &vec)
    }
}


void DrmHal::reportMetrics() const
{
    Vector<uint8_t> metrics;
+24 −0
Original line number Diff line number Diff line
@@ -46,6 +46,7 @@ enum {
    GET_PROPERTY_BYTE_ARRAY,
    SET_PROPERTY_STRING,
    SET_PROPERTY_BYTE_ARRAY,
    GET_METRICS,
    SET_CIPHER_ALGORITHM,
    SET_MAC_ALGORITHM,
    ENCRYPT,
@@ -393,6 +394,18 @@ struct BpDrm : public BpInterface<IDrm> {
        return reply.readInt32();
    }

    virtual status_t getMetrics(MediaAnalyticsItem *item) {
        Parcel data, reply;
        data.writeInterfaceToken(IDrm::getInterfaceDescriptor());

        status_t status = remote()->transact(GET_METRICS, data, &reply);
        if (status != OK) {
            return status;
        }

        item->readFromParcel(reply);
        return reply.readInt32();
    }

    virtual status_t setCipherAlgorithm(Vector<uint8_t> const &sessionId,
                                        String8 const &algorithm) {
@@ -829,6 +842,17 @@ status_t BnDrm::onTransact(
            return OK;
        }

        case GET_METRICS:
        {
            CHECK_INTERFACE(IDrm, data, reply);

            MediaAnalyticsItem item;
            status_t result = getMetrics(&item);
            item.writeToParcel(reply);
            reply->writeInt32(result);
            return OK;
        }

        case SET_CIPHER_ALGORITHM:
        {
            CHECK_INTERFACE(IDrm, data, reply);
+2 −0
Original line number Diff line number Diff line
@@ -24,6 +24,7 @@

#include <media/IDrm.h>
#include <media/IDrmClient.h>
#include <media/MediaAnalyticsItem.h>
#include <utils/threads.h>

using ::android::hardware::drm::V1_0::EventType;
@@ -104,6 +105,7 @@ struct DrmHal : public BnDrm,
    virtual status_t setPropertyString(String8 const &name, String8 const &value ) const;
    virtual status_t setPropertyByteArray(String8 const &name,
                                          Vector<uint8_t> const &value ) const;
    virtual status_t getMetrics(MediaAnalyticsItem *item);

    virtual status_t setCipherAlgorithm(Vector<uint8_t> const &sessionId,
                                        String8 const &algorithm);
+3 −0
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@
#include <media/stagefright/foundation/ABase.h>
#include <media/drm/DrmAPI.h>
#include <media/IDrmClient.h>
#include <media/MediaAnalyticsItem.h>

#ifndef ANDROID_IDRM_H_

@@ -86,6 +87,8 @@ struct IDrm : public IInterface {
    virtual status_t setPropertyByteArray(String8 const &name,
                                          Vector<uint8_t> const &value) const = 0;

    virtual status_t getMetrics(MediaAnalyticsItem *item) = 0;

    virtual status_t setCipherAlgorithm(Vector<uint8_t> const &sessionId,
                                        String8 const &algorithm) = 0;