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

Commit 1763bf1e authored by Rob Carr's avatar Rob Carr Committed by Automerger Merge Worker
Browse files

Merge "SF: Pass transformHint with releaseBuffer" into sc-dev am: 9d7aee1d

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/native/+/14882743

Change-Id: I4ea44fc1beea5b46a5bbf8e32f7d58f0466ff7a5
parents 500a733e 9d7aee1d
Loading
Loading
Loading
Loading
+7 −5
Original line number Original line Diff line number Diff line
@@ -302,23 +302,25 @@ void BLASTBufferQueue::transactionCallback(nsecs_t /*latchTime*/, const sp<Fence
// So we pass in a weak pointer to the BBQ and if it still alive, then we release the buffer.
// So we pass in a weak pointer to the BBQ and if it still alive, then we release the buffer.
// Otherwise, this is a no-op.
// Otherwise, this is a no-op.
static void releaseBufferCallbackThunk(wp<BLASTBufferQueue> context, uint64_t graphicBufferId,
static void releaseBufferCallbackThunk(wp<BLASTBufferQueue> context, uint64_t graphicBufferId,
                                       const sp<Fence>& releaseFence) {
                                       const sp<Fence>& releaseFence, uint32_t transformHint) {
    sp<BLASTBufferQueue> blastBufferQueue = context.promote();
    sp<BLASTBufferQueue> blastBufferQueue = context.promote();
    ALOGV("releaseBufferCallbackThunk graphicBufferId=%" PRIu64 " blastBufferQueue=%s",
    ALOGV("releaseBufferCallbackThunk graphicBufferId=%" PRIu64 " blastBufferQueue=%s",
          graphicBufferId, blastBufferQueue ? "alive" : "dead");
          graphicBufferId, blastBufferQueue ? "alive" : "dead");
    if (blastBufferQueue) {
    if (blastBufferQueue) {
        blastBufferQueue->releaseBufferCallback(graphicBufferId, releaseFence);
        blastBufferQueue->releaseBufferCallback(graphicBufferId, releaseFence, transformHint);
    }
    }
}
}


void BLASTBufferQueue::releaseBufferCallback(uint64_t graphicBufferId,
void BLASTBufferQueue::releaseBufferCallback(uint64_t graphicBufferId,
                                             const sp<Fence>& releaseFence) {
                                             const sp<Fence>& releaseFence,
                                             uint32_t transformHint) {
    ATRACE_CALL();
    ATRACE_CALL();
    std::unique_lock _lock{mMutex};
    std::unique_lock _lock{mMutex};
    BQA_LOGV("releaseBufferCallback graphicBufferId=%" PRIu64, graphicBufferId);
    BQA_LOGV("releaseBufferCallback graphicBufferId=%" PRIu64, graphicBufferId);


    if (mSurfaceControl != nullptr) {
    if (mSurfaceControl != nullptr) {
        mTransformHint = mSurfaceControl->getTransformHint();
        mTransformHint = transformHint;
        mSurfaceControl->setTransformHint(transformHint);
        mBufferItemConsumer->setTransformHint(mTransformHint);
        mBufferItemConsumer->setTransformHint(mTransformHint);
    }
    }


@@ -412,7 +414,7 @@ void BLASTBufferQueue::processNextBufferLocked(bool useNextTransaction) {


    auto releaseBufferCallback =
    auto releaseBufferCallback =
            std::bind(releaseBufferCallbackThunk, wp<BLASTBufferQueue>(this) /* callbackContext */,
            std::bind(releaseBufferCallbackThunk, wp<BLASTBufferQueue>(this) /* callbackContext */,
                      std::placeholders::_1, std::placeholders::_2);
                      std::placeholders::_1, std::placeholders::_2, std::placeholders::_3);
    t->setBuffer(mSurfaceControl, buffer, releaseBufferCallback);
    t->setBuffer(mSurfaceControl, buffer, releaseBufferCallback);
    t->setDataspace(mSurfaceControl, static_cast<ui::Dataspace>(bufferItem.mDataSpace));
    t->setDataspace(mSurfaceControl, static_cast<ui::Dataspace>(bufferItem.mDataSpace));
    t->setHdrMetadata(mSurfaceControl, bufferItem.mHdrMetadata);
    t->setHdrMetadata(mSurfaceControl, bufferItem.mHdrMetadata);
+3 −2
Original line number Original line Diff line number Diff line
@@ -251,10 +251,11 @@ public:
                                                                  stats);
                                                                  stats);
    }
    }


    void onReleaseBuffer(uint64_t graphicBufferId, sp<Fence> releaseFence) override {
    void onReleaseBuffer(uint64_t graphicBufferId, sp<Fence> releaseFence,
                         uint32_t transformHint) override {
        callRemoteAsync<decltype(
        callRemoteAsync<decltype(
                &ITransactionCompletedListener::onReleaseBuffer)>(Tag::ON_RELEASE_BUFFER,
                &ITransactionCompletedListener::onReleaseBuffer)>(Tag::ON_RELEASE_BUFFER,
                                                                  graphicBufferId, releaseFence);
                graphicBufferId, releaseFence, transformHint);
    }
    }
};
};


+5 −3
Original line number Original line Diff line number Diff line
@@ -331,7 +331,8 @@ void TransactionCompletedListener::onTransactionCompleted(ListenerStats listener
                        callback(surfaceStats.previousBufferId,
                        callback(surfaceStats.previousBufferId,
                                 surfaceStats.previousReleaseFence
                                 surfaceStats.previousReleaseFence
                                         ? surfaceStats.previousReleaseFence
                                         ? surfaceStats.previousReleaseFence
                                         : Fence::NO_FENCE);
                                         : Fence::NO_FENCE,
                                 surfaceStats.transformHint);
                    }
                    }
                }
                }
            }
            }
@@ -357,7 +358,8 @@ void TransactionCompletedListener::onTransactionCompleted(ListenerStats listener
}
}


void TransactionCompletedListener::onReleaseBuffer(uint64_t graphicBufferId,
void TransactionCompletedListener::onReleaseBuffer(uint64_t graphicBufferId,
                                                   sp<Fence> releaseFence) {
                                                   sp<Fence> releaseFence,
                                                   uint32_t transformHint) {
    ReleaseBufferCallback callback;
    ReleaseBufferCallback callback;
    {
    {
        std::scoped_lock<std::mutex> lock(mMutex);
        std::scoped_lock<std::mutex> lock(mMutex);
@@ -367,7 +369,7 @@ void TransactionCompletedListener::onReleaseBuffer(uint64_t graphicBufferId,
        ALOGE("Could not call release buffer callback, buffer not found %" PRIu64, graphicBufferId);
        ALOGE("Could not call release buffer callback, buffer not found %" PRIu64, graphicBufferId);
        return;
        return;
    }
    }
    callback(graphicBufferId, releaseFence);
    callback(graphicBufferId, releaseFence, transformHint);
}
}


ReleaseBufferCallback TransactionCompletedListener::popReleaseBufferCallbackLocked(
ReleaseBufferCallback TransactionCompletedListener::popReleaseBufferCallbackLocked(
+2 −1
Original line number Original line Diff line number Diff line
@@ -89,7 +89,8 @@ public:


    void transactionCallback(nsecs_t latchTime, const sp<Fence>& presentFence,
    void transactionCallback(nsecs_t latchTime, const sp<Fence>& presentFence,
            const std::vector<SurfaceControlStats>& stats);
            const std::vector<SurfaceControlStats>& stats);
    void releaseBufferCallback(uint64_t graphicBufferId, const sp<Fence>& releaseFence);
    void releaseBufferCallback(uint64_t graphicBufferId, const sp<Fence>& releaseFence,
                               uint32_t transformHint);
    void setNextTransaction(SurfaceComposerClient::Transaction *t);
    void setNextTransaction(SurfaceComposerClient::Transaction *t);
    void mergeWithNextTransaction(SurfaceComposerClient::Transaction* t, uint64_t frameNumber);
    void mergeWithNextTransaction(SurfaceComposerClient::Transaction* t, uint64_t frameNumber);
    void setTransactionCompleteCallback(uint64_t frameNumber,
    void setTransactionCompleteCallback(uint64_t frameNumber,
+2 −1
Original line number Original line Diff line number Diff line
@@ -158,7 +158,8 @@ public:


    virtual void onTransactionCompleted(ListenerStats stats) = 0;
    virtual void onTransactionCompleted(ListenerStats stats) = 0;


    virtual void onReleaseBuffer(uint64_t graphicBufferId, sp<Fence> releaseFence) = 0;
    virtual void onReleaseBuffer(uint64_t graphicBufferId, sp<Fence> releaseFence,
                                 uint32_t transformHint) = 0;
};
};


class BnTransactionCompletedListener : public SafeBnInterface<ITransactionCompletedListener> {
class BnTransactionCompletedListener : public SafeBnInterface<ITransactionCompletedListener> {
Loading