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

Commit 5e6848d4 authored by John Reck's avatar John Reck Committed by Android (Google) Code Review
Browse files

Merge "Support setBuffer w/ release callback" into tm-dev

parents 9ca4184c 57f748c7
Loading
Loading
Loading
Loading
+4 −5
Original line number Original line Diff line number Diff line
@@ -1421,7 +1421,7 @@ SurfaceComposerClient::Transaction& SurfaceComposerClient::Transaction::setBuffe


SurfaceComposerClient::Transaction& SurfaceComposerClient::Transaction::setBuffer(
SurfaceComposerClient::Transaction& SurfaceComposerClient::Transaction::setBuffer(
        const sp<SurfaceControl>& sc, const sp<GraphicBuffer>& buffer,
        const sp<SurfaceControl>& sc, const sp<GraphicBuffer>& buffer,
        const std::optional<sp<Fence>>& fence, const std::optional<uint64_t>& frameNumber,
        const std::optional<sp<Fence>>& fence, const std::optional<uint64_t>& optFrameNumber,
        ReleaseBufferCallback callback) {
        ReleaseBufferCallback callback) {
    layer_state_t* s = getLayerState(sc);
    layer_state_t* s = getLayerState(sc);
    if (!s) {
    if (!s) {
@@ -1433,10 +1433,9 @@ SurfaceComposerClient::Transaction& SurfaceComposerClient::Transaction::setBuffe


    std::shared_ptr<BufferData> bufferData = std::make_shared<BufferData>();
    std::shared_ptr<BufferData> bufferData = std::make_shared<BufferData>();
    bufferData->buffer = buffer;
    bufferData->buffer = buffer;
    if (frameNumber) {
    uint64_t frameNumber = sc->resolveFrameNumber(optFrameNumber);
        bufferData->frameNumber = *frameNumber;
    bufferData->frameNumber = frameNumber;
    bufferData->flags |= BufferData::BufferDataChange::frameNumberChanged;
    bufferData->flags |= BufferData::BufferDataChange::frameNumberChanged;
    }
    if (fence) {
    if (fence) {
        bufferData->acquireFence = *fence;
        bufferData->acquireFence = *fence;
        bufferData->flags |= BufferData::BufferDataChange::fenceChanged;
        bufferData->flags |= BufferData::BufferDataChange::fenceChanged;
+13 −0
Original line number Original line Diff line number Diff line
@@ -280,5 +280,18 @@ sp<SurfaceControl> SurfaceControl::getParentingLayer() {
    return this;
    return this;
}
}


uint64_t SurfaceControl::resolveFrameNumber(const std::optional<uint64_t>& frameNumber) {
    if (frameNumber.has_value()) {
        auto ret = frameNumber.value();
        // Set the fallback to something far enough ahead that in the unlikely event of mixed
        // "real" frame numbers and fallback frame numbers, we still won't collide in any
        // meaningful capacity
        mFallbackFrameNumber = ret + 100;
        return ret;
    } else {
        return mFallbackFrameNumber++;
    }
}

// ----------------------------------------------------------------------------
// ----------------------------------------------------------------------------
}; // namespace android
}; // namespace android
+4 −0
Original line number Original line Diff line number Diff line
@@ -19,6 +19,7 @@


#include <stdint.h>
#include <stdint.h>
#include <sys/types.h>
#include <sys/types.h>
#include <optional>


#include <utils/RefBase.h>
#include <utils/RefBase.h>
#include <utils/threads.h>
#include <utils/threads.h>
@@ -98,6 +99,8 @@ public:


    sp<SurfaceControl> getParentingLayer();
    sp<SurfaceControl> getParentingLayer();


    uint64_t resolveFrameNumber(const std::optional<uint64_t>& frameNumber);

private:
private:
    // can't be copied
    // can't be copied
    SurfaceControl& operator = (SurfaceControl& rhs);
    SurfaceControl& operator = (SurfaceControl& rhs);
@@ -124,6 +127,7 @@ private:
    uint32_t mHeight;
    uint32_t mHeight;
    PixelFormat mFormat;
    PixelFormat mFormat;
    uint32_t mCreateFlags;
    uint32_t mCreateFlags;
    uint64_t mFallbackFrameNumber = 100;
};
};


}; // namespace android
}; // namespace android