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

Commit 7e279f1a authored by Eric Chung's avatar Eric Chung Committed by android-build-merger
Browse files

Merge "Refine freeBuffer in Mapper 2.0" am: 9b2431d0 am: f6e09b2f am: 30576121

am: 13a6edaa

Change-Id: I6a410127b4604aa8e0ef0ac5c1b04df45283eb69
parents 58eb0c3e 13a6edaa
Loading
Loading
Loading
Loading
+14 −6
Original line number Diff line number Diff line
@@ -80,17 +80,21 @@ class MapperImpl : public Interface {
    }

    Return<Error> freeBuffer(void* buffer) override {
        native_handle_t* bufferHandle = removeImportedBuffer(buffer);
        native_handle_t* bufferHandle = getImportedBuffer(buffer);
        if (!bufferHandle) {
            return Error::BAD_BUFFER;
        }

        return mHal->freeBuffer(bufferHandle);
        Error error = mHal->freeBuffer(bufferHandle);
        if (error == Error::NONE) {
            removeImportedBuffer(buffer);
        }
        return error;
    }

    Return<void> lock(void* buffer, uint64_t cpuUsage, const V2_0::IMapper::Rect& accessRegion,
                      const hidl_handle& acquireFence, IMapper::lock_cb hidl_cb) override {
        const native_handle_t* bufferHandle = getImportedBuffer(buffer);
        const native_handle_t* bufferHandle = getConstImportedBuffer(buffer);
        if (!bufferHandle) {
            hidl_cb(Error::BAD_BUFFER, nullptr);
            return Void();
@@ -112,7 +116,7 @@ class MapperImpl : public Interface {
    Return<void> lockYCbCr(void* buffer, uint64_t cpuUsage, const V2_0::IMapper::Rect& accessRegion,
                           const hidl_handle& acquireFence,
                           IMapper::lockYCbCr_cb hidl_cb) override {
        const native_handle_t* bufferHandle = getImportedBuffer(buffer);
        const native_handle_t* bufferHandle = getConstImportedBuffer(buffer);
        if (!bufferHandle) {
            hidl_cb(Error::BAD_BUFFER, YCbCrLayout{});
            return Void();
@@ -132,7 +136,7 @@ class MapperImpl : public Interface {
    }

    Return<void> unlock(void* buffer, IMapper::unlock_cb hidl_cb) override {
        const native_handle_t* bufferHandle = getImportedBuffer(buffer);
        const native_handle_t* bufferHandle = getConstImportedBuffer(buffer);
        if (!bufferHandle) {
            hidl_cb(Error::BAD_BUFFER, nullptr);
            return Void();
@@ -160,7 +164,11 @@ class MapperImpl : public Interface {
        return static_cast<native_handle_t*>(buffer);
    }

    virtual const native_handle_t* getImportedBuffer(void* buffer) const {
    virtual native_handle_t* getImportedBuffer(void* buffer) const {
        return static_cast<native_handle_t*>(buffer);
    }

    virtual const native_handle_t* getConstImportedBuffer(void* buffer) const {
        return static_cast<const native_handle_t*>(buffer);
    }

+13 −2
Original line number Diff line number Diff line
@@ -68,7 +68,14 @@ class GrallocImportedBufferPool {
        return mBufferHandles.erase(bufferHandle) == 1 ? bufferHandle : nullptr;
    }

    const native_handle_t* get(void* buffer) {
    native_handle_t* get(void* buffer) {
        auto bufferHandle = static_cast<native_handle_t*>(buffer);

        std::lock_guard<std::mutex> lock(mMutex);
        return mBufferHandles.count(bufferHandle) == 1 ? bufferHandle : nullptr;
    }

    const native_handle_t* getConst(void* buffer) {
        auto bufferHandle = static_cast<const native_handle_t*>(buffer);

        std::lock_guard<std::mutex> lock(mMutex);
@@ -92,9 +99,13 @@ class GrallocMapper : public T {
        return GrallocImportedBufferPool::getInstance().remove(buffer);
    }

    const native_handle_t* getImportedBuffer(void* buffer) const override {
    native_handle_t* getImportedBuffer(void* buffer) const override {
        return GrallocImportedBufferPool::getInstance().get(buffer);
    }

    const native_handle_t* getConstImportedBuffer(void* buffer) const override {
        return GrallocImportedBufferPool::getInstance().getConst(buffer);
    }
};

class GrallocLoader {