diff options
| author | 2021-06-24 17:16:27 +0000 | |
|---|---|---|
| committer | 2021-06-24 17:16:27 +0000 | |
| commit | 027806a9986aba469472ae34f8f9ec545a486ac9 (patch) | |
| tree | 0e8f78f17f48c95d3a17f5571641d3fb0119646e /libs/gui/SurfaceComposerClient.cpp | |
| parent | 44391847be5e317e33e4aea369eb4227155e2824 (diff) | |
| parent | 97ab85cad8d6c34ac33ca9a05b3031270b561da8 (diff) | |
Merge "Revert "Ensure reportFrameMetrics not being called on deleted instance"" into sc-dev am: 8810677cf3 am: 97ab85cad8
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/native/+/15080430
Change-Id: I0d90db63d8a5ac7153c2d2be6a3a9371b5331f60
Diffstat (limited to 'libs/gui/SurfaceComposerClient.cpp')
| -rw-r--r-- | libs/gui/SurfaceComposerClient.cpp | 13 |
1 files changed, 5 insertions, 8 deletions
diff --git a/libs/gui/SurfaceComposerClient.cpp b/libs/gui/SurfaceComposerClient.cpp index cf9afa1414..41b114882d 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); } |