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

Commit a41ad501 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: If61d09f79eddeeb2b827a776edf2e21342f73ed9
parents 8c425717 9d7aee1d
Loading
Loading
Loading
Loading
+7 −5
Original line number 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.
// Otherwise, this is a no-op.
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();
    ALOGV("releaseBufferCallbackThunk graphicBufferId=%" PRIu64 " blastBufferQueue=%s",
          graphicBufferId, blastBufferQueue ? "alive" : "dead");
    if (blastBufferQueue) {
        blastBufferQueue->releaseBufferCallback(graphicBufferId, releaseFence);
        blastBufferQueue->releaseBufferCallback(graphicBufferId, releaseFence, transformHint);
    }
}

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

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

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

    auto releaseBufferCallback =
            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->setDataspace(mSurfaceControl, static_cast<ui::Dataspace>(bufferItem.mDataSpace));
    t->setHdrMetadata(mSurfaceControl, bufferItem.mHdrMetadata);
+3 −2
Original line number Diff line number Diff line
@@ -251,10 +251,11 @@ public:
                                                                  stats);
    }

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

+5 −3
Original line number Diff line number Diff line
@@ -331,7 +331,8 @@ void TransactionCompletedListener::onTransactionCompleted(ListenerStats listener
                        callback(surfaceStats.previousBufferId,
                                 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,
                                                   sp<Fence> releaseFence) {
                                                   sp<Fence> releaseFence,
                                                   uint32_t transformHint) {
    ReleaseBufferCallback callback;
    {
        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);
        return;
    }
    callback(graphicBufferId, releaseFence);
    callback(graphicBufferId, releaseFence, transformHint);
}

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

    void transactionCallback(nsecs_t latchTime, const sp<Fence>& presentFence,
            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 mergeWithNextTransaction(SurfaceComposerClient::Transaction* t, uint64_t frameNumber);
    void setTransactionCompleteCallback(uint64_t frameNumber,
+2 −1
Original line number Diff line number Diff line
@@ -158,7 +158,8 @@ public:

    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> {
Loading