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

Commit f6581aaa authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Convert IResourceManagerService to stable AIDL"

parents 01efa108 181e6950
Loading
Loading
Loading
Loading
+30 −6
Original line number Diff line number Diff line
@@ -25,6 +25,7 @@

#include <android/hardware/drm/1.2/types.h>
#include <android/hidl/manager/1.2/IServiceManager.h>
#include <android/media/BnResourceManagerClient.h>
#include <hidl/ServiceManagement.h>
#include <media/EventMetric.h>
#include <media/PluginMetricsReporting.h>
@@ -295,21 +296,43 @@ static status_t toStatusT_1_2(Status_V1_2 status) {

Mutex DrmHal::mLock;

bool DrmHal::DrmSessionClient::reclaimResource() {
struct DrmHal::DrmSessionClient : public android::media::BnResourceManagerClient {
    explicit DrmSessionClient(DrmHal* drm, const Vector<uint8_t>& sessionId)
      : mSessionId(sessionId),
        mDrm(drm) {}

    ::android::binder::Status reclaimResource(bool* _aidl_return) override;
    ::android::binder::Status getName(::std::string* _aidl_return) override;

    const Vector<uint8_t> mSessionId;

protected:
    virtual ~DrmSessionClient();

private:
    wp<DrmHal> mDrm;

    DISALLOW_EVIL_CONSTRUCTORS(DrmSessionClient);
};

::android::binder::Status DrmHal::DrmSessionClient::reclaimResource(bool* _aidl_return) {
    sp<DrmHal> drm = mDrm.promote();
    if (drm == NULL) {
        return true;
        *_aidl_return = true;
        return ::android::binder::Status::ok();
    }
    status_t err = drm->closeSession(mSessionId);
    if (err != OK) {
        return false;
        *_aidl_return = false;
        return ::android::binder::Status::ok();
    }
    drm->sendEvent(EventType::SESSION_RECLAIMED,
            toHidlVec(mSessionId), hidl_vec<uint8_t>());
    return true;
    *_aidl_return = true;
    return ::android::binder::Status::ok();
}

String8 DrmHal::DrmSessionClient::getName() {
::android::binder::Status DrmHal::DrmSessionClient::getName(::std::string* _aidl_return) {
    String8 name;
    sp<DrmHal> drm = mDrm.promote();
    if (drm == NULL) {
@@ -323,7 +346,8 @@ String8 DrmHal::DrmSessionClient::getName() {
        name.appendFormat("%02x", mSessionId[i]);
    }
    name.append("]");
    return name;
    *_aidl_return = name;
    return ::android::binder::Status::ok();
}

DrmHal::DrmSessionClient::~DrmSessionClient() {
+14 −10
Original line number Diff line number Diff line
@@ -18,11 +18,12 @@
#define LOG_TAG "DrmSessionManager"
#include <utils/Log.h>

#include <android/media/IResourceManagerClient.h>
#include <android/media/IResourceManagerService.h>
#include <binder/IPCThreadState.h>
#include <binder/IProcessInfoService.h>
#include <binder/IServiceManager.h>
#include <cutils/properties.h>
#include <media/IResourceManagerClient.h>
#include <media/MediaResource.h>
#include <mediadrm/DrmSessionManager.h>
#include <unistd.h>
@@ -33,6 +34,7 @@
#include "ResourceManagerService.h"

namespace android {
using android::binder::Status;

static String8 GetSessionIdString(const Vector<uint8_t> &sessionId) {
    String8 sessionIdStr;
@@ -52,16 +54,16 @@ static uint64_t toClientId(const sp<IResourceManagerClient>& drm) {
    return reinterpret_cast<int64_t>(drm.get());
}

static Vector<MediaResource> toResourceVec(const Vector<uint8_t> &sessionId) {
    Vector<MediaResource> resources;
    // use UINT64_MAX to decrement through addition overflow
    resources.push_back(MediaResource(MediaResource::kDrmSession, toStdVec(sessionId), UINT64_MAX));
static std::vector<MediaResourceParcel> toResourceVec(
        const Vector<uint8_t> &sessionId, int64_t value) {
    std::vector<MediaResourceParcel> resources;
    resources.push_back(MediaResource::DrmSessionResource(toStdVec(sessionId), value));
    return resources;
}

static sp<IResourceManagerService> getResourceManagerService() {
    if (property_get_bool("persist.device_config.media_native.mediadrmserver", 1)) {
        return new ResourceManagerService();
        return new android::media::ResourceManagerService();
    }
    sp<IServiceManager> sm = defaultServiceManager();
    if (sm == NULL) {
@@ -131,7 +133,7 @@ void DrmSessionManager::addSession(int pid,

    int64_t clientId = toClientId(drm);
    mSessionMap[toStdVec(sessionId)] = (SessionInfo){pid, uid, clientId};
    mService->addResource(pid, uid, clientId, drm, toResourceVec(sessionId));
    mService->addResource(pid, uid, clientId, drm, toResourceVec(sessionId, INT64_MAX));
}

void DrmSessionManager::useSession(const Vector<uint8_t> &sessionId) {
@@ -144,7 +146,7 @@ void DrmSessionManager::useSession(const Vector<uint8_t> &sessionId) {
    }

    auto info = it->second;
    mService->addResource(info.pid, info.uid, info.clientId, NULL, toResourceVec(sessionId));
    mService->addResource(info.pid, info.uid, info.clientId, NULL, toResourceVec(sessionId, -1));
}

void DrmSessionManager::removeSession(const Vector<uint8_t> &sessionId) {
@@ -157,7 +159,7 @@ void DrmSessionManager::removeSession(const Vector<uint8_t> &sessionId) {
    }

    auto info = it->second;
    mService->removeResource(info.pid, info.clientId, toResourceVec(sessionId));
    mService->removeResource(info.pid, info.clientId, toResourceVec(sessionId, INT64_MAX));
    mSessionMap.erase(it);
}

@@ -176,7 +178,9 @@ bool DrmSessionManager::reclaimSession(int callingPid) {
    // cannot update mSessionMap because we do not know which sessionId is reclaimed;
    // we rely on IResourceManagerClient to removeSession in reclaimResource
    Vector<uint8_t> dummy;
    return service->reclaimResource(callingPid, toResourceVec(dummy));
    bool success;
    Status status = service->reclaimResource(callingPid, toResourceVec(dummy, INT64_MAX), &success);
    return status.isOk() && success;
}

size_t DrmSessionManager::getSessionCount() const {
+1 −19
Original line number Diff line number Diff line
@@ -26,7 +26,6 @@
#include <android/hardware/drm/1.2/IDrmPlugin.h>
#include <android/hardware/drm/1.2/IDrmPluginListener.h>

#include <media/IResourceManagerService.h>
#include <media/MediaAnalyticsItem.h>
#include <mediadrm/DrmMetrics.h>
#include <mediadrm/DrmSessionManager.h>
@@ -62,24 +61,7 @@ struct DrmHal : public BnDrm,
                public IBinder::DeathRecipient,
                public IDrmPluginListener_V1_2 {

    struct DrmSessionClient : public BnResourceManagerClient {
        explicit DrmSessionClient(DrmHal* drm, const Vector<uint8_t>& sessionId)
          : mSessionId(sessionId),
            mDrm(drm) {}

        virtual bool reclaimResource();
        virtual String8 getName();

        const Vector<uint8_t> mSessionId;

    protected:
        virtual ~DrmSessionClient();

    private:
        wp<DrmHal> mDrm;

        DISALLOW_EVIL_CONSTRUCTORS(DrmSessionClient);
    };
    struct DrmSessionClient;

    DrmHal();
    virtual ~DrmHal();
+6 −1
Original line number Diff line number Diff line
@@ -19,7 +19,6 @@
#define DRM_SESSION_MANAGER_H_

#include <binder/IBinder.h>
#include <media/IResourceManagerService.h>
#include <media/stagefright/foundation/ABase.h>
#include <utils/RefBase.h>
#include <utils/KeyedVector.h>
@@ -33,7 +32,13 @@
namespace android {

class DrmSessionManagerTest;

namespace media {
class IResourceManagerClient;
class IResourceManagerService;
}
using android::media::IResourceManagerClient;
using android::media::IResourceManagerService;

bool isEqualSessionId(const Vector<uint8_t> &sessionId1, const Vector<uint8_t> &sessionId2);

+30 −7
Original line number Diff line number Diff line
@@ -22,13 +22,19 @@ cc_library {
        enabled: true,
    },
    double_loadable: true,
    srcs: ["AudioParameter.cpp", "TypeConverter.cpp"],
    srcs: [
        "AudioParameter.cpp",
        "TypeConverter.cpp",
    ],
    cflags: [
        "-Werror",
        "-Wno-error=deprecated-declarations",
        "-Wall",
    ],
    shared_libs: ["libutils", "liblog"],
    shared_libs: [
        "libutils",
        "liblog",
    ],
    header_libs: [
        "libmedia_headers",
        "libaudioclient_headers",
@@ -49,6 +55,21 @@ filegroup {
    path: "aidl",
}

aidl_interface {
    name: "resourcemanager_aidl_interface",
    local_include_dir: "aidl",
    srcs: [
        "aidl/android/media/IResourceManagerClient.aidl",
        "aidl/android/media/IResourceManagerService.aidl",
        "aidl/android/media/MediaResourceType.aidl",
        "aidl/android/media/MediaResourceSubType.aidl",
        "aidl/android/media/MediaResourceParcel.aidl",
        "aidl/android/media/MediaResourcePolicyParcel.aidl",
    ],
    api_dir: "api/resourcemanager",
    versions: ["1"],
}

cc_library_shared {
    name: "libmedia_omx",
    vendor_available: true,
@@ -127,7 +148,6 @@ cc_library_shared {
    },
}


cc_library_shared {
    name: "libmedia_omx_client",

@@ -277,8 +297,6 @@ cc_library {
        "IMediaSource.cpp",
        "IRemoteDisplay.cpp",
        "IRemoteDisplayClient.cpp",
        "IResourceManagerClient.cpp",
        "IResourceManagerService.cpp",
        "IStreamSource.cpp",
        "MediaUtils.cpp",
        "Metadata.cpp",
@@ -345,6 +363,11 @@ cc_library {

    static_libs: [
        "libc_malloc_debug_backtrace", // for memory heap analysis
        "resourcemanager_aidl_interface-cpp",
    ],

    export_static_lib_headers: [
        "resourcemanager_aidl_interface-cpp",
    ],

    export_include_dirs: [
Loading