summaryrefslogtreecommitdiff
path: root/libs/gui/SurfaceComposerClient.cpp
diff options
context:
space:
mode:
author Vishnu Nair <vishnun@google.com> 2022-08-11 16:32:58 -0700
committer Vishnu Nair <vishnun@google.com> 2022-08-15 17:55:06 -0700
commit80da86b8ae51da0c936450bf8c16355be14e943c (patch)
tree0c955d771791cd84c6815288f85c1018e5ce1fae /libs/gui/SurfaceComposerClient.cpp
parent1c676d2403aafc91a2cbae325652e040efe23d89 (diff)
SurfaceComposerClient: Expose default apply token
The default apply token specifies which transaction queue transactions from a process is sent to in surfaceflinger. This queue is used to ensure transactions from a process are applied in order. If a transaction from multiple processes need to be applied in order, we can use a commit callback to act as a barrier or pass transactions across processes to be applied on a single process. In some cases where operations are intertwined it may be advantageous to set a single transaction queue for multiple processes. In this case this api can be used to set a single queue to apply transactions by setting the same apply token on both processes. Note this api if misused can result in surprising out of order transactions. Test: manually set the same applytoken on multiple processes and verify they go into the same queue. Bug: 242193885 Bug: 242193885 Change-Id: I106fa701cc844d675e2ff2a05b5edcfed8cf85ff
Diffstat (limited to 'libs/gui/SurfaceComposerClient.cpp')
-rw-r--r--libs/gui/SurfaceComposerClient.cpp13
1 files changed, 10 insertions, 3 deletions
diff --git a/libs/gui/SurfaceComposerClient.cpp b/libs/gui/SurfaceComposerClient.cpp
index d16ddb91a5..e7c1d7f1c4 100644
--- a/libs/gui/SurfaceComposerClient.cpp
+++ b/libs/gui/SurfaceComposerClient.cpp
@@ -1038,9 +1038,7 @@ status_t SurfaceComposerClient::Transaction::apply(bool synchronous, bool oneWay
flags |= ISurfaceComposer::eEarlyWakeupEnd;
}
- sp<IBinder> applyToken = mApplyToken
- ? mApplyToken
- : IInterface::asBinder(TransactionCompletedListener::getIInstance());
+ sp<IBinder> applyToken = mApplyToken ? mApplyToken : sApplyToken;
sf->setTransactionState(mFrameTimelineInfo, composerStates, displayStates, flags, applyToken,
mInputWindowCommands, mDesiredPresentTime, mIsAutoTimestamp,
@@ -1055,6 +1053,15 @@ status_t SurfaceComposerClient::Transaction::apply(bool synchronous, bool oneWay
return NO_ERROR;
}
+sp<IBinder> SurfaceComposerClient::Transaction::sApplyToken = new BBinder();
+
+sp<IBinder> SurfaceComposerClient::Transaction::getDefaultApplyToken() {
+ return sApplyToken;
+}
+
+void SurfaceComposerClient::Transaction::setDefaultApplyToken(sp<IBinder> applyToken) {
+ sApplyToken = applyToken;
+}
// ---------------------------------------------------------------------------
sp<IBinder> SurfaceComposerClient::createDisplay(const String8& displayName, bool secure) {