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

Commit e346d3bd authored by android-build-team Robot's avatar android-build-team Robot
Browse files

Snap for 5817507 from fb092d3b to qt-qpr1-release

Change-Id: I2a1c53dfdc61632bfd8f5c4c393c543c7b9a6aaf
parents fde2d8c3 fb092d3b
Loading
Loading
Loading
Loading
+27 −3
Original line number Diff line number Diff line
@@ -32,6 +32,7 @@ enum {
    CONFIG = IBinder::FIRST_CALL_TRANSACTION,
    ADD_RESOURCE,
    REMOVE_RESOURCE,
    REMOVE_CLIENT,
    RECLAIM_RESOURCE,
};

@@ -72,12 +73,14 @@ public:

    virtual void addResource(
            int pid,
            int uid,
            int64_t clientId,
            const sp<IResourceManagerClient> client,
            const Vector<MediaResource> &resources) {
        Parcel data, reply;
        data.writeInterfaceToken(IResourceManagerService::getInterfaceDescriptor());
        data.writeInt32(pid);
        data.writeInt32(uid);
        data.writeInt64(clientId);
        data.writeStrongBinder(IInterface::asBinder(client));
        writeToParcel(&data, resources);
@@ -85,15 +88,25 @@ public:
        remote()->transact(ADD_RESOURCE, data, &reply);
    }

    virtual void removeResource(int pid, int64_t clientId) {
    virtual void removeResource(int pid, int64_t clientId, const Vector<MediaResource> &resources) {
        Parcel data, reply;
        data.writeInterfaceToken(IResourceManagerService::getInterfaceDescriptor());
        data.writeInt32(pid);
        data.writeInt64(clientId);
        writeToParcel(&data, resources);

        remote()->transact(REMOVE_RESOURCE, data, &reply);
    }

    virtual void removeClient(int pid, int64_t clientId) {
        Parcel data, reply;
        data.writeInterfaceToken(IResourceManagerService::getInterfaceDescriptor());
        data.writeInt32(pid);
        data.writeInt64(clientId);

        remote()->transact(REMOVE_CLIENT, data, &reply);
    }

    virtual bool reclaimResource(int callingPid, const Vector<MediaResource> &resources) {
        Parcel data, reply;
        data.writeInterfaceToken(IResourceManagerService::getInterfaceDescriptor());
@@ -129,6 +142,7 @@ status_t BnResourceManagerService::onTransact(
        case ADD_RESOURCE: {
            CHECK_INTERFACE(IResourceManagerService, data, reply);
            int pid = data.readInt32();
            int uid = data.readInt32();
            int64_t clientId = data.readInt64();
            sp<IResourceManagerClient> client(
                    interface_cast<IResourceManagerClient>(data.readStrongBinder()));
@@ -137,7 +151,7 @@ status_t BnResourceManagerService::onTransact(
            }
            Vector<MediaResource> resources;
            readFromParcel(data, &resources);
            addResource(pid, clientId, client, resources);
            addResource(pid, uid, clientId, client, resources);
            return NO_ERROR;
        } break;

@@ -145,7 +159,17 @@ status_t BnResourceManagerService::onTransact(
            CHECK_INTERFACE(IResourceManagerService, data, reply);
            int pid = data.readInt32();
            int64_t clientId = data.readInt64();
            removeResource(pid, clientId);
            Vector<MediaResource> resources;
            readFromParcel(data, &resources);
            removeResource(pid, clientId, resources);
            return NO_ERROR;
        } break;

        case REMOVE_CLIENT: {
            CHECK_INTERFACE(IResourceManagerService, data, reply);
            int pid = data.readInt32();
            int64_t clientId = data.readInt64();
            removeClient(pid, clientId);
            return NO_ERROR;
        } break;

+5 −1
Original line number Diff line number Diff line
@@ -39,11 +39,15 @@ public:

    virtual void addResource(
            int pid,
            int uid,
            int64_t clientId,
            const sp<IResourceManagerClient> client,
            const Vector<MediaResource> &resources) = 0;

    virtual void removeResource(int pid, int64_t clientId) = 0;
    virtual void removeResource(int pid, int64_t clientId,
            const Vector<MediaResource> &resources) = 0;

    virtual void removeClient(int pid, int64_t clientId) = 0;

    virtual bool reclaimResource(
            int callingPid,
+4 −1
Original line number Diff line number Diff line
@@ -31,12 +31,13 @@ public:
        kNonSecureCodec,
        kGraphicMemory,
        kCpuBoost,
        kBattery,
    };

    enum SubType {
        kUnspecifiedSubType = 0,
        kAudioCodec,
        kVideoCodec
        kVideoCodec,
    };

    MediaResource();
@@ -62,6 +63,8 @@ inline static const char *asString(MediaResource::Type i, const char *def = "??"
        case MediaResource::kSecureCodec:    return "secure-codec";
        case MediaResource::kNonSecureCodec: return "non-secure-codec";
        case MediaResource::kGraphicMemory:  return "graphic-memory";
        case MediaResource::kCpuBoost:       return "cpu-boost";
        case MediaResource::kBattery:        return "battery";
        default:                             return def;
    }
}
+12 −23
Original line number Diff line number Diff line
@@ -57,7 +57,6 @@
#include <media/stagefright/OMXClient.h>
#include <media/stagefright/PersistentSurface.h>
#include <media/stagefright/SurfaceUtils.h>
#include <mediautils/BatteryNotifier.h>
#include <private/android_filesystem_config.h>
#include <utils/Singleton.h>

@@ -166,8 +165,9 @@ private:
    DISALLOW_EVIL_CONSTRUCTORS(ResourceManagerClient);
};

MediaCodec::ResourceManagerServiceProxy::ResourceManagerServiceProxy(pid_t pid)
        : mPid(pid) {
MediaCodec::ResourceManagerServiceProxy::ResourceManagerServiceProxy(
        pid_t pid, uid_t uid)
        : mPid(pid), mUid(uid) {
    if (mPid == MediaCodec::kNoPid) {
        mPid = IPCThreadState::self()->getCallingPid();
    }
@@ -204,7 +204,7 @@ void MediaCodec::ResourceManagerServiceProxy::addResource(
    if (mService == NULL) {
        return;
    }
    mService->addResource(mPid, clientId, client, resources);
    mService->addResource(mPid, mUid, clientId, client, resources);
}

void MediaCodec::ResourceManagerServiceProxy::removeResource(int64_t clientId) {
@@ -212,7 +212,7 @@ void MediaCodec::ResourceManagerServiceProxy::removeResource(int64_t clientId) {
    if (mService == NULL) {
        return;
    }
    mService->removeResource(mPid, clientId);
    mService->removeClient(mPid, clientId);
}

bool MediaCodec::ResourceManagerServiceProxy::reclaimResource(
@@ -517,8 +517,6 @@ MediaCodec::MediaCodec(const sp<ALooper> &looper, pid_t pid, uid_t uid)
      mStickyError(OK),
      mSoftRenderer(NULL),
      mAnalyticsItem(NULL),
      mResourceManagerClient(new ResourceManagerClient(this)),
      mResourceManagerService(new ResourceManagerServiceProxy(pid)),
      mBatteryStatNotified(false),
      mIsVideo(false),
      mVideoWidth(0),
@@ -537,6 +535,8 @@ MediaCodec::MediaCodec(const sp<ALooper> &looper, pid_t pid, uid_t uid)
    } else {
        mUid = uid;
    }
    mResourceManagerClient = new ResourceManagerClient(this);
    mResourceManagerService = new ResourceManagerServiceProxy(pid, mUid);

    initAnalyticsItem();
}
@@ -1977,6 +1977,11 @@ void MediaCodec::onMessageReceived(const sp<AMessage> &msg) {
                    if (mIsVideo) {
                        // audio codec is currently ignored.
                        addResource(resourceType, MediaResource::kVideoCodec, 1);
                        // TODO: track battery on/off by actual queueing/dequeueing
                        // For now, keep existing behavior and request battery on/off
                        // together with codec init/uninit. We'll improve the tracking
                        // later by adding/removing this based on queue/dequeue timing.
                        addResource(MediaResource::kBattery, MediaResource::kVideoCodec, 1);
                    }

                    (new AMessage)->postReply(mReplyID);
@@ -3126,8 +3131,6 @@ void MediaCodec::setState(State newState) {
    mState = newState;

    cancelPendingDequeueOperations();

    updateBatteryStat();
}

void MediaCodec::returnBuffersToCodec(bool isReclaim) {
@@ -3631,20 +3634,6 @@ status_t MediaCodec::amendOutputFormatWithCodecSpecificData(
    return OK;
}

void MediaCodec::updateBatteryStat() {
    if (!mIsVideo) {
        return;
    }

    if (mState == CONFIGURED && !mBatteryStatNotified) {
        BatteryNotifier::getInstance().noteStartVideo(mUid);
        mBatteryStatNotified = true;
    } else if (mState == UNINITIALIZED && mBatteryStatNotified) {
        BatteryNotifier::getInstance().noteStopVideo(mUid);
        mBatteryStatNotified = false;
    }
}

std::string MediaCodec::stateString(State state) {
    const char *rval = NULL;
    char rawbuffer[16]; // room for "%d"
+2 −2
Original line number Diff line number Diff line
@@ -283,7 +283,7 @@ private:
    };

    struct ResourceManagerServiceProxy : public IBinder::DeathRecipient {
        ResourceManagerServiceProxy(pid_t pid);
        ResourceManagerServiceProxy(pid_t pid, uid_t uid);
        ~ResourceManagerServiceProxy();

        void init();
@@ -304,6 +304,7 @@ private:
        Mutex mLock;
        sp<IResourceManagerService> mService;
        pid_t mPid;
        uid_t mUid;
    };

    State mState;
@@ -425,7 +426,6 @@ private:
    status_t onSetParameters(const sp<AMessage> &params);

    status_t amendOutputFormatWithCodecSpecificData(const sp<MediaCodecBuffer> &buffer);
    void updateBatteryStat();
    bool isExecuting() const;

    uint64_t getGraphicBufferSize();
Loading