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

Commit 21db5728 authored by Ronghua Wu's avatar Ronghua Wu Committed by Android (Google) Code Review
Browse files

Merge "mediaresourcemanager: add dumpsys support."

parents 7d7ea036 8f9dd872
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@
#define ANDROID_IRESOURCEMANAGERCLIENT_H

#include <utils/RefBase.h>
#include <utils/String8.h>
#include <binder/IInterface.h>
#include <binder/Parcel.h>

@@ -29,6 +30,7 @@ public:
    DECLARE_META_INTERFACE(ResourceManagerClient);

    virtual bool reclaimResource() = 0;
    virtual String8 getName() = 0;
};

// ----------------------------------------------------------------------------
+20 −0
Original line number Diff line number Diff line
@@ -25,6 +25,7 @@ namespace android {

enum {
    RECLAIM_RESOURCE = IBinder::FIRST_CALL_TRANSACTION,
    GET_NAME,
};

class BpResourceManagerClient: public BpInterface<IResourceManagerClient>
@@ -46,6 +47,19 @@ public:
        }
        return ret;
    }

    virtual String8 getName() {
        Parcel data, reply;
        data.writeInterfaceToken(IResourceManagerClient::getInterfaceDescriptor());

        String8 ret;
        status_t status = remote()->transact(GET_NAME, data, &reply);
        if (status == NO_ERROR) {
            ret = reply.readString8();
        }
        return ret;
    }

};

IMPLEMENT_META_INTERFACE(ResourceManagerClient, "android.media.IResourceManagerClient");
@@ -62,6 +76,12 @@ status_t BnResourceManagerClient::onTransact(
            reply->writeInt32(ret);
            return NO_ERROR;
        } break;
        case GET_NAME: {
            CHECK_INTERFACE(IResourceManagerClient, data, reply);
            String8 ret = getName();
            reply->writeString8(ret);
            return NO_ERROR;
        } break;
        default:
            return BBinder::onTransact(code, data, reply, flags);
    }
+15 −0
Original line number Diff line number Diff line
@@ -79,6 +79,21 @@ struct ResourceManagerClient : public BnResourceManagerClient {
        return (err == OK);
    }

    virtual String8 getName() {
        String8 ret;
        sp<MediaCodec> codec = mMediaCodec.promote();
        if (codec == NULL) {
            // codec is already gone.
            return ret;
        }

        AString name;
        if (codec->getName(&name) == OK) {
            ret.setTo(name.c_str());
        }
        return ret;
    }

protected:
    virtual ~ResourceManagerClient() {}

+45 −0
Original line number Diff line number Diff line
@@ -88,6 +88,51 @@ static ResourceInfo& getResourceInfoForEdit(
    return infos.editItemAt(infos.size() - 1);
}

status_t ResourceManagerService::dump(int fd, const Vector<String16>& args) {
    Mutex::Autolock lock(mLock);

    String8 result;
    const size_t SIZE = 256;
    char buffer[SIZE];

    snprintf(buffer, SIZE, "ResourceManagerService: %p\n", this);
    result.append(buffer);
    result.append("  Policies:\n");
    snprintf(buffer, SIZE, "    SupportsMultipleSecureCodecs: %d\n", mSupportsMultipleSecureCodecs);
    result.append(buffer);
    snprintf(buffer, SIZE, "    SupportsSecureWithNonSecureCodec: %d\n", mSupportsSecureWithNonSecureCodec);
    result.append(buffer);

    snprintf(buffer, SIZE, "  Processes:\n");
    result.append(buffer);
    for (size_t i = 0; i < mMap.size(); ++i) {
        snprintf(buffer, SIZE, "    Pid: %d\n", mMap.keyAt(i));
        result.append(buffer);

        const ResourceInfos &infos = mMap.valueAt(i);
        for (size_t j = 0; j < infos.size(); ++j) {
            snprintf(buffer, SIZE, "      Client:\n");
            result.append(buffer);
            snprintf(buffer, SIZE, "        Id: %lld\n", (long long)infos[j].clientId);
            result.append(buffer);

            snprintf(buffer, SIZE, "        Name: %s\n", infos[j].client->getName().string());
            result.append(buffer);

            Vector<MediaResource> resources = infos[j].resources;
            snprintf(buffer, SIZE, "        Resources:\n");
            result.append(buffer);
            for (size_t k = 0; k < resources.size(); ++k) {
                snprintf(buffer, SIZE, "          %s\n", resources[k].toString().string());
                result.append(buffer);
            }
        }
    }

    write(fd, result.string(), result.size());
    return OK;
}

ResourceManagerService::ResourceManagerService()
    : mProcessInfo(new ProcessInfo()),
      mSupportsMultipleSecureCodecs(true),
+2 −0
Original line number Diff line number Diff line
@@ -48,6 +48,8 @@ class ResourceManagerService
public:
    static char const *getServiceName() { return "media.resource_manager"; }

    virtual status_t dump(int fd, const Vector<String16>& args);

    ResourceManagerService();
    ResourceManagerService(sp<ProcessInfoInterface> processInfo);

Loading