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

Commit 2f12e9d9 authored by android-build-team Robot's avatar android-build-team Robot
Browse files

Snap for 7468789 from adbd486a to sc-d1-release

Change-Id: I6a9df6f204e1b9756bbbcf3d1ce7da6a7a7f6899
parents f706ffe2 adbd486a
Loading
Loading
Loading
Loading
+13 −9
Original line number Diff line number Diff line
@@ -210,13 +210,13 @@ void TransactionCompletedListener::removeReleaseBufferCallback(uint64_t graphicB

void TransactionCompletedListener::addSurfaceStatsListener(void* context, void* cookie,
        sp<SurfaceControl> surfaceControl, SurfaceStatsCallback listener) {
    std::lock_guard<std::mutex> lock(mMutex);
    std::scoped_lock<std::recursive_mutex> lock(mSurfaceStatsListenerMutex);
    mSurfaceStatsListeners.insert({surfaceControl->getHandle(),
            SurfaceStatsCallbackEntry(context, cookie, listener)});
}

void TransactionCompletedListener::removeSurfaceStatsListener(void* context, void* cookie) {
    std::lock_guard<std::mutex> lock(mMutex);
    std::scoped_lock<std::recursive_mutex> lock(mSurfaceStatsListenerMutex);
    for (auto it = mSurfaceStatsListeners.begin(); it != mSurfaceStatsListeners.end();) {
        auto [itContext, itCookie, itListener] = it->second;
        if (itContext == context && itCookie == cookie) {
@@ -242,7 +242,6 @@ void TransactionCompletedListener::addSurfaceControlToCallbacks(

void TransactionCompletedListener::onTransactionCompleted(ListenerStats listenerStats) {
    std::unordered_map<CallbackId, CallbackTranslation, CallbackIdHash> callbacksMap;
    std::multimap<sp<IBinder>, SurfaceStatsCallbackEntry> surfaceListeners;
    {
        std::lock_guard<std::mutex> lock(mMutex);

@@ -258,7 +257,6 @@ void TransactionCompletedListener::onTransactionCompleted(ListenerStats listener
         * sp<SurfaceControl> that could possibly exist for the callbacks.
         */
        callbacksMap = mCallbacks;
        surfaceListeners = mSurfaceStatsListeners;
        for (const auto& transactionStats : listenerStats.transactionStats) {
            for (auto& callbackId : transactionStats.callbackIds) {
                mCallbacks.erase(callbackId);
@@ -339,12 +337,18 @@ void TransactionCompletedListener::onTransactionCompleted(ListenerStats listener
                             surfaceControlStats);
        }
        for (const auto& surfaceStats : transactionStats.surfaceStats) {
            auto listenerRange = surfaceListeners.equal_range(surfaceStats.surfaceControl);
            {
                // Acquire surface stats listener lock such that we guarantee that after calling
                // unregister, there won't be any further callback.
                std::scoped_lock<std::recursive_mutex> lock(mSurfaceStatsListenerMutex);
                auto listenerRange = mSurfaceStatsListeners.equal_range(
                        surfaceStats.surfaceControl);
                for (auto it = listenerRange.first; it != listenerRange.second; it++) {
                    auto entry = it->second;
                    entry.callback(entry.context, transactionStats.latchTime,
                        transactionStats.presentFence, surfaceStats);
                }
            }

            if (surfaceStats.jankData.empty()) continue;

+7 −2
Original line number Diff line number Diff line
@@ -655,6 +655,9 @@ class TransactionCompletedListener : public BnTransactionCompletedListener {
    // 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;

    bool mListening GUARDED_BY(mMutex) = false;

    int64_t mCallbackIdCounter GUARDED_BY(mMutex) = 1;
@@ -683,8 +686,10 @@ class TransactionCompletedListener : public BnTransactionCompletedListener {
    std::multimap<sp<IBinder>, sp<JankDataListener>> mJankListeners;
    std::unordered_map<uint64_t /* graphicsBufferId */, ReleaseBufferCallback>
            mReleaseBufferCallbacks GUARDED_BY(mMutex);
    std::multimap<sp<IBinder>, SurfaceStatsCallbackEntry>
                mSurfaceStatsListeners GUARDED_BY(mMutex);

    // This is protected by mSurfaceStatsListenerMutex, but GUARDED_BY isn't supported for
    // std::recursive_mutex
    std::multimap<sp<IBinder>, SurfaceStatsCallbackEntry> mSurfaceStatsListeners;

public:
    static sp<TransactionCompletedListener> getInstance();
+1 −0
Original line number Diff line number Diff line
@@ -33,6 +33,7 @@
#include <gui/BufferQueue.h>
#include <private/gui/SyncFeatures.h>
#include <renderengine/Image.h>
#include "TunnelModeEnabledReporter.h"

#include "EffectLayer.h"
#include "FrameTracer/FrameTracer.h"
+4 −2
Original line number Diff line number Diff line
@@ -847,11 +847,13 @@ void Layer::commitTransaction(State& stateToCommit) {
}

uint32_t Layer::getTransactionFlags(uint32_t flags) {
    return mTransactionFlags.fetch_and(~flags) & flags;
    auto ret = mTransactionFlags & flags;
    mTransactionFlags &= ~flags;
    return ret;
}

uint32_t Layer::setTransactionFlags(uint32_t flags) {
    return mTransactionFlags.fetch_or(flags);
    return mTransactionFlags |= flags;
}

bool Layer::setPosition(float x, float y) {
+1 −1
Original line number Diff line number Diff line
@@ -960,7 +960,7 @@ protected:

    // these are protected by an external lock (mStateLock)
    State mCurrentState;
    std::atomic<uint32_t> mTransactionFlags{0};
    uint32_t mTransactionFlags{0};

    // Timestamp history for UIAutomation. Thread safe.
    FrameTracker mFrameTracker;
Loading