Loading services/surfaceflinger/Layer.cpp +6 −3 Original line number Diff line number Diff line Loading @@ -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; Loading services/surfaceflinger/SurfaceFlinger.cpp +4 −0 Original line number Diff line number Diff line Loading @@ -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 Loading services/surfaceflinger/SurfaceFlinger.h +6 −0 Original line number Diff line number Diff line Loading @@ -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(); Loading Loading
services/surfaceflinger/Layer.cpp +6 −3 Original line number Diff line number Diff line Loading @@ -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; Loading
services/surfaceflinger/SurfaceFlinger.cpp +4 −0 Original line number Diff line number Diff line Loading @@ -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 Loading
services/surfaceflinger/SurfaceFlinger.h +6 −0 Original line number Diff line number Diff line Loading @@ -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(); Loading