Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 39f4b1c2 authored by Jorim Jaggi's avatar Jorim Jaggi
Browse files

Revert "Ensure reportFrameMetrics not being called on deleted instance"

This reverts commit 1283885c.

Reason: Creates deadlock, while not actually fixing the original
issue it was trying to fix.
Bug: 191581295

Change-Id: I84013239cc9d7ddfc6351639937ff98a21ee15a2
parent 63787777
Loading
Loading
Loading
Loading
+5 −8
Original line number Diff line number Diff line
@@ -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);
            }
+1 −7
Original line number Diff line number Diff line
@@ -652,9 +652,6 @@ class TransactionCompletedListener : public BnTransactionCompletedListener {

    std::mutex mMutex;

    // This lock needs to be recursive so we can unregister a callback from within that callback.
    std::recursive_mutex mJankListenerMutex;

    // This lock needs to be recursive so we can unregister a callback from within that callback.
    std::recursive_mutex mSurfaceStatsListenerMutex;

@@ -680,10 +677,7 @@ class TransactionCompletedListener : public BnTransactionCompletedListener {

    std::unordered_map<CallbackId, CallbackTranslation, CallbackIdHash> mCallbacks
            GUARDED_BY(mMutex);

    // This is protected by mJankListenerMutex, but GUARDED_BY isn't supported for
    // std::recursive_mutex
    std::multimap<sp<IBinder>, sp<JankDataListener>> mJankListeners;
    std::multimap<sp<IBinder>, sp<JankDataListener>> mJankListeners GUARDED_BY(mMutex);
    std::unordered_map<uint64_t /* graphicsBufferId */, ReleaseBufferCallback>
            mReleaseBufferCallbacks GUARDED_BY(mMutex);