From 1a227f092ae5acc161eee58edd84cbc74356f05f Mon Sep 17 00:00:00 2001 From: chaviw Date: Mon, 25 Apr 2022 16:23:44 -0500 Subject: 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 --- libs/gui/SurfaceComposerClient.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'libs/gui/SurfaceComposerClient.cpp') diff --git a/libs/gui/SurfaceComposerClient.cpp b/libs/gui/SurfaceComposerClient.cpp index 7a63af0ed3..6642ec6337 100644 --- a/libs/gui/SurfaceComposerClient.cpp +++ b/libs/gui/SurfaceComposerClient.cpp @@ -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&, + const std::vector&) {}, + nullptr); + mContainsBuffer = true; return *this; } -- cgit v1.2.3-59-g8ed1b