From 39f4b1c202a5bfb57987ebac350b6cd93a69e147 Mon Sep 17 00:00:00 2001 From: Jorim Jaggi Date: Wed, 23 Jun 2021 13:39:41 +0200 Subject: Revert "Ensure reportFrameMetrics not being called on deleted instance" This reverts commit 1283885c6478edabb3bcdf26a971818a9f510d40. Reason: Creates deadlock, while not actually fixing the original issue it was trying to fix. Bug: 191581295 Change-Id: I84013239cc9d7ddfc6351639937ff98a21ee15a2 --- libs/gui/SurfaceComposerClient.cpp | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) (limited to 'libs/gui/SurfaceComposerClient.cpp') diff --git a/libs/gui/SurfaceComposerClient.cpp b/libs/gui/SurfaceComposerClient.cpp index c69435d328..fd78309462 100644 --- a/libs/gui/SurfaceComposerClient.cpp +++ b/libs/gui/SurfaceComposerClient.cpp @@ -182,12 +182,12 @@ CallbackId TransactionCompletedListener::addCallbackFunction( void TransactionCompletedListener::addJankListener(const sp& listener, sp surfaceControl) { - std::scoped_lock lock(mJankListenerMutex); + std::lock_guard lock(mMutex); mJankListeners.insert({surfaceControl->getHandle(), listener}); } void TransactionCompletedListener::removeJankListener(const sp& listener) { - std::scoped_lock lock(mJankListenerMutex); + std::lock_guard 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 callbacksMap; + std::multimap, sp> jankListenersMap; { std::lock_guard lock(mMutex); @@ -257,6 +258,7 @@ void TransactionCompletedListener::onTransactionCompleted(ListenerStats listener * sp 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 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); } -- cgit v1.2.3-59-g8ed1b