summaryrefslogtreecommitdiff
path: root/libs/gui/SurfaceComposerClient.cpp
diff options
context:
space:
mode:
author TreeHugger Robot <treehugger-gerrit@google.com> 2021-06-24 17:06:32 +0000
committer Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> 2021-06-24 17:06:32 +0000
commit956d1a892af92ca16f45db3317a76919094206fe (patch)
treebf55810e4d62904b59518f87af9e0876c90eb59e /libs/gui/SurfaceComposerClient.cpp
parent544dd4d3f42f88e4fe7485e807aa4a3cf6f3d34e (diff)
parent8810677cf373a8ac168d8da3f661787e0c1e3fc0 (diff)
Merge "Revert "Ensure reportFrameMetrics not being called on deleted instance"" into sc-dev am: 8810677cf3
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/native/+/15080430 Change-Id: I221e1885109feaf13db05db7ed790c701174b3b6
Diffstat (limited to 'libs/gui/SurfaceComposerClient.cpp')
-rw-r--r--libs/gui/SurfaceComposerClient.cpp13
1 files changed, 5 insertions, 8 deletions
diff --git a/libs/gui/SurfaceComposerClient.cpp b/libs/gui/SurfaceComposerClient.cpp
index 0d16bc6f29..38d6fef1ed 100644
--- a/libs/gui/SurfaceComposerClient.cpp
+++ b/libs/gui/SurfaceComposerClient.cpp
@@ -182,12 +182,12 @@ CallbackId TransactionCompletedListener::addCallbackFunction(
void TransactionCompletedListener::addJankListener(const sp<JankDataListener>& listener,
sp<SurfaceControl> surfaceControl) {
- std::scoped_lock<std::recursive_mutex> lock(mJankListenerMutex);
+ std::lock_guard<std::mutex> lock(mMutex);
mJankListeners.insert({surfaceControl->getHandle(), listener});
}
void TransactionCompletedListener::removeJankListener(const sp<JankDataListener>& listener) {
- std::scoped_lock<std::recursive_mutex> lock(mJankListenerMutex);
+ std::lock_guard<std::mutex> lock(mMutex);
for (auto it = mJankListeners.begin(); it != mJankListeners.end();) {
if (it->second == listener) {
it = mJankListeners.erase(it);
@@ -242,6 +242,7 @@ void TransactionCompletedListener::addSurfaceControlToCallbacks(
void TransactionCompletedListener::onTransactionCompleted(ListenerStats listenerStats) {
std::unordered_map<CallbackId, CallbackTranslation, CallbackIdHash> callbacksMap;
+ std::multimap<sp<IBinder>, sp<JankDataListener>> jankListenersMap;
{
std::lock_guard<std::mutex> lock(mMutex);
@@ -257,6 +258,7 @@ void TransactionCompletedListener::onTransactionCompleted(ListenerStats listener
* sp<SurfaceControl> that could possibly exist for the callbacks.
*/
callbacksMap = mCallbacks;
+ jankListenersMap = mJankListeners;
for (const auto& transactionStats : listenerStats.transactionStats) {
for (auto& callbackId : transactionStats.callbackIds) {
mCallbacks.erase(callbackId);
@@ -352,12 +354,7 @@ void TransactionCompletedListener::onTransactionCompleted(ListenerStats listener
}
if (surfaceStats.jankData.empty()) continue;
-
- // Acquire jank listener lock such that we guarantee that after calling unregister,
- // there won't be any further callback.
- std::scoped_lock<std::recursive_mutex> lock(mJankListenerMutex);
- auto copy = mJankListeners;
- auto jankRange = copy.equal_range(surfaceStats.surfaceControl);
+ auto jankRange = jankListenersMap.equal_range(surfaceStats.surfaceControl);
for (auto it = jankRange.first; it != jankRange.second; it++) {
it->second->onJankDataAvailable(surfaceStats.jankData);
}