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

Commit 858944df authored by Ady Abraham's avatar Ady Abraham Committed by Android (Google) Code Review
Browse files

Merge "SF: check isVsyncValid based on the transaction submitter" into sc-dev

parents b5ecae7b 5690bdaa
Loading
Loading
Loading
Loading
+10 −8
Original line number Diff line number Diff line
@@ -3320,7 +3320,8 @@ void SurfaceFlinger::flushTransactionQueues() {
                    if (!transactionIsReadyToBeApplied(transaction.frameTimelineInfo,
                                                       transaction.isAutoTimestamp,
                                                       transaction.desiredPresentTime,
                                                       transaction.states, pendingBuffers)) {
                                                       transaction.originUid, transaction.states,
                                                       pendingBuffers)) {
                        setTransactionFlags(eTransactionFlushNeeded);
                        break;
                    }
@@ -3347,7 +3348,8 @@ void SurfaceFlinger::flushTransactionQueues() {
                if (!transactionIsReadyToBeApplied(transaction.frameTimelineInfo,
                                                   transaction.isAutoTimestamp,
                                                   transaction.desiredPresentTime,
                                                   transaction.states, pendingBuffers) ||
                                                   transaction.originUid, transaction.states,
                                                   pendingBuffers) ||
                    pendingTransactions) {
                    mPendingTransactionQueues[transaction.applyToken].push(std::move(transaction));
                } else {
@@ -3382,7 +3384,7 @@ bool SurfaceFlinger::transactionFlushNeeded() {

bool SurfaceFlinger::transactionIsReadyToBeApplied(
        const FrameTimelineInfo& info, bool isAutoTimestamp, int64_t desiredPresentTime,
        const Vector<ComposerState>& states,
        uid_t originUid, const Vector<ComposerState>& states,
        std::unordered_set<sp<IBinder>, ISurfaceComposer::SpHash<IBinder>>& pendingBuffers) {
    ATRACE_CALL();
    const nsecs_t expectedPresentTime = mExpectedPresentTime.load();
@@ -3395,6 +3397,11 @@ bool SurfaceFlinger::transactionIsReadyToBeApplied(
        ready = false;
    }

    if (!mScheduler->isVsyncValid(expectedPresentTime, originUid)) {
        ATRACE_NAME("!isVsyncValid");
        ready = false;
    }

    for (const ComposerState& state : states) {
        const layer_state_t& s = state.state;
        const bool acquireFenceChanged = (s.what & layer_state_t::eAcquireFenceChanged);
@@ -3423,11 +3430,6 @@ bool SurfaceFlinger::transactionIsReadyToBeApplied(
            ready = false;
        }

        if (!mScheduler->isVsyncValid(expectedPresentTime, layer->getOwnerUid())) {
            ATRACE_NAME("!isVsyncValidForUid");
            ready = false;
        }

        if (acquireFenceChanged) {
            // If backpressure is enabled and we already have a buffer to commit, keep the
            // transaction in the queue.
+1 −1
Original line number Diff line number Diff line
@@ -837,7 +837,7 @@ private:
    void commitOffscreenLayers();
    bool transactionIsReadyToBeApplied(
            const FrameTimelineInfo& info, bool isAutoTimestamp, int64_t desiredPresentTime,
            const Vector<ComposerState>& states,
            uid_t originUid, const Vector<ComposerState>& states,
            std::unordered_set<sp<IBinder>, ISurfaceComposer::SpHash<IBinder>>& pendingBuffers)
            REQUIRES(mStateLock);
    uint32_t setDisplayStateLocked(const DisplayState& s) REQUIRES(mStateLock);