Support setBuffer w/ release callback
Allow setBuffer to take a release callback without
passing a frame number. A fallback frame number on
the target SurfaceControl is used instead.
Bug: 220897032
Test: SurfaceControlTest CTS
Change-Id: Ib110755e2887396d41a5d52af1305ccc2bf0e9bd
diff --git a/libs/gui/SurfaceComposerClient.cpp b/libs/gui/SurfaceComposerClient.cpp
index 27856ce..ed047c2 100644
--- a/libs/gui/SurfaceComposerClient.cpp
+++ b/libs/gui/SurfaceComposerClient.cpp
@@ -1421,7 +1421,7 @@
SurfaceComposerClient::Transaction& SurfaceComposerClient::Transaction::setBuffer(
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) {
layer_state_t* s = getLayerState(sc);
if (!s) {
@@ -1433,10 +1433,9 @@
std::shared_ptr<BufferData> bufferData = std::make_shared<BufferData>();
bufferData->buffer = buffer;
- if (frameNumber) {
- bufferData->frameNumber = *frameNumber;
- bufferData->flags |= BufferData::BufferDataChange::frameNumberChanged;
- }
+ uint64_t frameNumber = sc->resolveFrameNumber(optFrameNumber);
+ bufferData->frameNumber = frameNumber;
+ bufferData->flags |= BufferData::BufferDataChange::frameNumberChanged;
if (fence) {
bufferData->acquireFence = *fence;
bufferData->flags |= BufferData::BufferDataChange::fenceChanged;