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

Commit 1a227f09 authored by chaviw's avatar chaviw
Browse files

Add transaction callback in SurfaceComposerClient::setBuffer

With the current infrastructure, a release callback will not be invoked
if there's no transaction callback in the case when a buffer is latched
and not released early. This is because the legacy implementation didn't
have a release callback and sent releases in the transaction callback.
Because of this, we need to make sure to have a transaction callback set up
when a buffer is sent in a transaction to ensure the caller gets the release
callback, regardless if they set up a transaction callback.

Test: android.view.cts.SurfaceControlTest
Bug: 230380821
Fixes: 226687688
Fixes: 226463500
Change-Id: Id4d5f4a79c85ae8df02018b3fa1cbdc8b6930931
parent c8c33325
Loading
Loading
Loading
Loading
+12 −0
Original line number Diff line number Diff line
@@ -1495,6 +1495,18 @@ SurfaceComposerClient::Transaction& SurfaceComposerClient::Transaction::setBuffe
    s->bufferData = std::move(bufferData);
    registerSurfaceControlForCallback(sc);

    // With the current infrastructure, a release callback will not be invoked if there's no
    // transaction callback in the case when a buffer is latched and not released early. This is
    // because the legacy implementation didn't have a release callback and sent releases in the
    // transaction callback. Because of this, we need to make sure to have a transaction callback
    // set up when a buffer is sent in a transaction to ensure the caller gets the release
    // callback, regardless if they set up a transaction callback.
    //
    // TODO (b/230380821): Remove when release callbacks are separated from transaction callbacks
    addTransactionCompletedCallback([](void*, nsecs_t, const sp<Fence>&,
                                       const std::vector<SurfaceControlStats>&) {},
                                    nullptr);

    mContainsBuffer = true;
    return *this;
}