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

Commit 9eff2497 authored by ramindani's avatar ramindani
Browse files

[SF] Add a new method for latch unsignaled transactions

When Unsignaled transaction is applied, buffer processing may
stall. The display appears frozen, and recording a trace is
hard or not much use. It can also be hard to reproduce these
scenarios.

Add a new method which helps identify unsignaled transactions in
stacktraces. It calls the same method as before, so there is no
change in behavior.

BUG: 221079645
Test: atest libsurfaceflinger_unittest, atest libgui_test, atest VtsHalGraphicsComposer3_TargetTest
Change-Id: I5ad46e7c3f2784091b7d973f16056de9c8a4ac4b
parent 86d3d987
Loading
Loading
Loading
Loading
+11 −3
Original line number Original line Diff line number Diff line
@@ -3695,6 +3695,15 @@ bool SurfaceFlinger::stopTransactionProcessing(
    return false;
    return false;
}
}


int SurfaceFlinger::flushUnsignaledPendingTransactionQueues(
        std::vector<TransactionState>& transactions,
        std::unordered_map<sp<IBinder>, uint64_t, SpHash<IBinder>>& bufferLayersReadyToPresent,
        std::unordered_set<sp<IBinder>, SpHash<IBinder>>& applyTokensWithUnsignaledTransactions) {
    return flushPendingTransactionQueues(transactions, bufferLayersReadyToPresent,
                                         applyTokensWithUnsignaledTransactions,
                                         /*tryApplyUnsignaled*/ true);
}

int SurfaceFlinger::flushPendingTransactionQueues(
int SurfaceFlinger::flushPendingTransactionQueues(
        std::vector<TransactionState>& transactions,
        std::vector<TransactionState>& transactions,
        std::unordered_map<sp<IBinder>, uint64_t, SpHash<IBinder>>& bufferLayersReadyToPresent,
        std::unordered_map<sp<IBinder>, uint64_t, SpHash<IBinder>>& bufferLayersReadyToPresent,
@@ -3849,9 +3858,8 @@ bool SurfaceFlinger::flushTransactionQueues(int64_t vsyncId) {
            // If we are allowing latch unsignaled of some form, now it's the time to go over the
            // If we are allowing latch unsignaled of some form, now it's the time to go over the
            // transactions that were not applied and try to apply them unsignaled.
            // transactions that were not applied and try to apply them unsignaled.
            if (enableLatchUnsignaledConfig != LatchUnsignaledConfig::Disabled) {
            if (enableLatchUnsignaledConfig != LatchUnsignaledConfig::Disabled) {
                flushPendingTransactionQueues(transactions, bufferLayersReadyToPresent,
                flushUnsignaledPendingTransactionQueues(transactions, bufferLayersReadyToPresent,
                                              applyTokensWithUnsignaledTransactions,
                                                        applyTokensWithUnsignaledTransactions);
                                              /*tryApplyUnsignaled*/ true);
            }
            }


            return applyTransactions(transactions, vsyncId);
            return applyTransactions(transactions, vsyncId);
+6 −0
Original line number Original line Diff line number Diff line
@@ -770,6 +770,12 @@ private:
            std::unordered_set<sp<IBinder>, SpHash<IBinder>>& applyTokensWithUnsignaledTransactions,
            std::unordered_set<sp<IBinder>, SpHash<IBinder>>& applyTokensWithUnsignaledTransactions,
            bool tryApplyUnsignaled) REQUIRES(mStateLock, mQueueLock);
            bool tryApplyUnsignaled) REQUIRES(mStateLock, mQueueLock);


    int flushUnsignaledPendingTransactionQueues(
            std::vector<TransactionState>& transactions,
            std::unordered_map<sp<IBinder>, uint64_t, SpHash<IBinder>>& bufferLayersReadyToPresent,
            std::unordered_set<sp<IBinder>, SpHash<IBinder>>& applyTokensWithUnsignaledTransactions)
            REQUIRES(mStateLock, mQueueLock);

    uint32_t setClientStateLocked(const FrameTimelineInfo&, ComposerState&,
    uint32_t setClientStateLocked(const FrameTimelineInfo&, ComposerState&,
                                  int64_t desiredPresentTime, bool isAutoTimestamp,
                                  int64_t desiredPresentTime, bool isAutoTimestamp,
                                  int64_t postTime, uint32_t permissions) REQUIRES(mStateLock);
                                  int64_t postTime, uint32_t permissions) REQUIRES(mStateLock);