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

Commit dc684872 authored by Pablo Gamito's avatar Pablo Gamito
Browse files

Add origin PID and UID to queued transactions

Allows us to record the transaction origin when transaction queues are flushed by the main thread

Test: N/A
Change-Id: Ie31da48e4928883c3d9023f6c0c7d682ab9b3412
parent 3e8f0e6d
Loading
Loading
Loading
Loading
+8 −7
Original line number Diff line number Diff line
@@ -3300,8 +3300,8 @@ bool SurfaceFlinger::flushTransactionQueues() {
                                      mPendingInputWindowCommands, transaction.desiredPresentTime,
                                      transaction.buffer, transaction.postTime,
                                      transaction.privileged, transaction.hasListenerCallbacks,
                                      transaction.listenerCallbacks, /*originPID*/ -1,
                                      /*originUID*/ -1, /*isMainThread*/ true);
                                      transaction.listenerCallbacks, transaction.originPID,
                                      transaction.originUID, /*isMainThread*/ true);
                transactionQueue.pop();
                flushedATransaction = true;
            }
@@ -3381,18 +3381,19 @@ void SurfaceFlinger::setTransactionState(
        mExpectedPresentTime = calculateExpectedPresentTime(systemTime());
    }

    IPCThreadState* ipc = IPCThreadState::self();
    const int originPID = ipc->getCallingPid();
    const int originUID = ipc->getCallingUid();

    if (pendingTransactions || !transactionIsReadyToBeApplied(desiredPresentTime, states)) {
        mTransactionQueues[applyToken].emplace(states, displays, flags, desiredPresentTime,
                                               uncacheBuffer, postTime, privileged,
                                               hasListenerCallbacks, listenerCallbacks);
                                               hasListenerCallbacks, listenerCallbacks, originPID,
                                               originUID);
        setTransactionFlags(eTransactionFlushNeeded);
        return;
    }

    IPCThreadState* ipc = IPCThreadState::self();
    const int originPID = ipc->getCallingPid();
    const int originUID = ipc->getCallingUid();

    applyTransactionState(states, displays, flags, inputWindowCommands, desiredPresentTime,
                          uncacheBuffer, postTime, privileged, hasListenerCallbacks,
                          listenerCallbacks, originPID, originUID, /*isMainThread*/ false);
+7 −2
Original line number Diff line number Diff line
@@ -1140,7 +1140,8 @@ private:
                         const Vector<DisplayState>& displayStates, uint32_t transactionFlags,
                         int64_t desiredPresentTime, const client_cache_t& uncacheBuffer,
                         int64_t postTime, bool privileged, bool hasListenerCallbacks,
                         std::vector<ListenerCallbacks> listenerCallbacks)
                         std::vector<ListenerCallbacks> listenerCallbacks, int originPID,
                         int originUID)
              : states(composerStates),
                displays(displayStates),
                flags(transactionFlags),
@@ -1149,7 +1150,9 @@ private:
                postTime(postTime),
                privileged(privileged),
                hasListenerCallbacks(hasListenerCallbacks),
                listenerCallbacks(listenerCallbacks) {}
                listenerCallbacks(listenerCallbacks),
                originPID(originPID),
                originUID(originUID) {}

        Vector<ComposerState> states;
        Vector<DisplayState> displays;
@@ -1160,6 +1163,8 @@ private:
        bool privileged;
        bool hasListenerCallbacks;
        std::vector<ListenerCallbacks> listenerCallbacks;
        int originPID;
        int originUID;
    };
    std::unordered_map<sp<IBinder>, std::queue<TransactionState>, IListenerHash> mTransactionQueues;