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

Commit 094525cb authored by Robert Carr's avatar Robert Carr Committed by Automerger Merge Worker
Browse files

DO NOT MERGE: SurfaceFlinger: Don't wake for pending transactions. am: 7ec777d9 am: 3181ed2d

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/native/+/11659377

Change-Id: Ib01ec24d04b2cd789068db422fb5bbc705a2993d
parents 766d7bc7 3181ed2d
Loading
Loading
Loading
Loading
+6 −3
Original line number Diff line number Diff line
@@ -855,11 +855,14 @@ bool Layer::applyPendingStates(State* stateToCommit) {
        }
    }

    // If we still have pending updates, wake SurfaceFlinger back up and point
    // it at this layer so we can process them
    // If we still have pending updates, we need to ensure SurfaceFlinger
    // will keep calling doTransaction, and so we set the transaction flags.
    // However, our pending states won't clear until a frame is available,
    // and so there is no need to specifically trigger a wakeup. Rather
    // we set the flags and wait for something else to wake us up.
    if (!mPendingStates.empty()) {
        setTransactionFlags(eTransactionNeeded);
        mFlinger->setTransactionFlags(eTraversalNeeded);
        mFlinger->setTransactionFlagsNoWake(eTraversalNeeded);
    }

    mCurrentState.modified = false;
+4 −0
Original line number Diff line number Diff line
@@ -3243,6 +3243,10 @@ uint32_t SurfaceFlinger::setTransactionFlags(uint32_t flags,
    return old;
}

uint32_t SurfaceFlinger::setTransactionFlagsNoWake(uint32_t flags) {
    return mTransactionFlags.fetch_or(flags);
}

bool SurfaceFlinger::flushTransactionQueues() {
    // to prevent onHandleDestroyed from being called while the lock is held,
    // we must keep a copy of the transactions (specifically the composer
+6 −0
Original line number Diff line number Diff line
@@ -628,6 +628,12 @@ private:
    uint32_t peekTransactionFlags();
    // Can only be called from the main thread or with mStateLock held
    uint32_t setTransactionFlags(uint32_t flags);
    // Set the transaction flags, but don't trigger a wakeup! We use this cases where
    // there are still pending transactions but we know they won't be ready until a frame
    // arrives from a different layer. So we need to ensure we performTransaction from invalidate
    // but there is no need to try and wake up immediately to do it. Rather we rely on
    // onFrameAvailable to wake us up.
    uint32_t setTransactionFlagsNoWake(uint32_t flags);
    uint32_t setTransactionFlags(uint32_t flags, Scheduler::TransactionStart transactionStart);
    void commitTransaction() REQUIRES(mStateLock);
    void commitOffscreenLayers();