diff options
| -rw-r--r-- | services/surfaceflinger/SurfaceFlinger.cpp | 2 | ||||
| -rw-r--r-- | services/surfaceflinger/VSyncModulator.h | 11 |
2 files changed, 11 insertions, 2 deletions
diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp index 20a6d30c1c..57f729bf0b 100644 --- a/services/surfaceflinger/SurfaceFlinger.cpp +++ b/services/surfaceflinger/SurfaceFlinger.cpp @@ -2166,7 +2166,7 @@ void SurfaceFlinger::handleTransaction(uint32_t transactionFlags) // with mStateLock held to guarantee that mCurrentState won't change // until the transaction is committed. - mVsyncModulator.setTransactionStart(VSyncModulator::TransactionStart::NORMAL); + mVsyncModulator.onTransactionHandled(); transactionFlags = getTransactionFlags(eTransactionMask); handleTransactionLocked(transactionFlags); diff --git a/services/surfaceflinger/VSyncModulator.h b/services/surfaceflinger/VSyncModulator.h index 3126debed4..3e5800e2a2 100644 --- a/services/surfaceflinger/VSyncModulator.h +++ b/services/surfaceflinger/VSyncModulator.h @@ -55,11 +55,20 @@ public: } void setTransactionStart(TransactionStart transactionStart) { - if (transactionStart == mTransactionStart) return; + // An early transaction stays an early transaction. + if (transactionStart == mTransactionStart || mTransactionStart == TransactionStart::EARLY) { + return; + } mTransactionStart = transactionStart; updatePhaseOffsets(); } + void onTransactionHandled() { + if (mTransactionStart == TransactionStart::NORMAL) return; + mTransactionStart = TransactionStart::NORMAL; + updatePhaseOffsets(); + } + void setLastFrameUsedRenderEngine(bool re) { if (re == mLastFrameUsedRenderEngine) return; mLastFrameUsedRenderEngine = re; |