diff options
author | 2018-10-12 13:44:41 -0700 | |
---|---|---|
committer | 2018-10-13 10:26:10 -0700 | |
commit | 7ecce8c62d11b6a830bd9c68a71b6f842cac2e7c (patch) | |
tree | c4d6118a2a82d2063ee2d3778a81b976d095bcc0 | |
parent | 8dec3913042c8f199c79168980da8bfc78da97a1 (diff) |
SF: Move TransactionStart from VsyncModulator to Scheduler
This is part of go/surface-flinger-scheduler.
Test: SF tests pass.
Change-Id: I45872aeb67603e15f1d5080d0b9440bc986579e4
-rw-r--r-- | services/surfaceflinger/Scheduler/Scheduler.h | 3 | ||||
-rw-r--r-- | services/surfaceflinger/Scheduler/VSyncModulator.h | 19 | ||||
-rw-r--r-- | services/surfaceflinger/SurfaceFlinger.cpp | 9 | ||||
-rw-r--r-- | services/surfaceflinger/SurfaceFlinger.h | 2 |
4 files changed, 18 insertions, 15 deletions
diff --git a/services/surfaceflinger/Scheduler/Scheduler.h b/services/surfaceflinger/Scheduler/Scheduler.h index fcb46e6cdf..d7c9651650 100644 --- a/services/surfaceflinger/Scheduler/Scheduler.h +++ b/services/surfaceflinger/Scheduler/Scheduler.h @@ -29,6 +29,9 @@ namespace android { class Scheduler { public: + // Enum to indicate whether to start the transaction early, or at vsync time. + enum class TransactionStart { EARLY, NORMAL }; + /* The scheduler handle is a BBinder object passed to the client from which we can extract * an ID for subsequent operations. */ diff --git a/services/surfaceflinger/Scheduler/VSyncModulator.h b/services/surfaceflinger/Scheduler/VSyncModulator.h index ea8ca4c8b9..dde0c57f72 100644 --- a/services/surfaceflinger/Scheduler/VSyncModulator.h +++ b/services/surfaceflinger/Scheduler/VSyncModulator.h @@ -39,8 +39,6 @@ public: nsecs_t app; }; - enum TransactionStart { EARLY, NORMAL }; - // Sets the phase offsets // // sfEarly: The phase offset when waking up SF early, which happens when marking a transaction @@ -75,13 +73,14 @@ public: mSfConnectionHandle = sfConnectionHandle; } - void setTransactionStart(TransactionStart transactionStart) { - if (transactionStart == TransactionStart::EARLY) { + void setTransactionStart(Scheduler::TransactionStart transactionStart) { + if (transactionStart == Scheduler::TransactionStart::EARLY) { mRemainingEarlyFrameCount = MIN_EARLY_FRAME_COUNT; } // An early transaction stays an early transaction. - if (transactionStart == mTransactionStart || mTransactionStart == TransactionStart::EARLY) { + if (transactionStart == mTransactionStart || + mTransactionStart == Scheduler::TransactionStart::EARLY) { return; } mTransactionStart = transactionStart; @@ -89,8 +88,8 @@ public: } void onTransactionHandled() { - if (mTransactionStart == TransactionStart::NORMAL) return; - mTransactionStart = TransactionStart::NORMAL; + if (mTransactionStart == Scheduler::TransactionStart::NORMAL) return; + mTransactionStart = Scheduler::TransactionStart::NORMAL; updateOffsets(); } @@ -138,7 +137,8 @@ private: } Offsets getOffsets() { - if (mTransactionStart == TransactionStart::EARLY || mRemainingEarlyFrameCount > 0) { + if (mTransactionStart == Scheduler::TransactionStart::EARLY || + mRemainingEarlyFrameCount > 0) { return mEarlyOffsets; } else if (mLastFrameUsedRenderEngine) { return mEarlyGlOffsets; @@ -160,7 +160,8 @@ private: std::atomic<Offsets> mOffsets; - std::atomic<TransactionStart> mTransactionStart = TransactionStart::NORMAL; + std::atomic<Scheduler::TransactionStart> mTransactionStart = + Scheduler::TransactionStart::NORMAL; std::atomic<bool> mLastFrameUsedRenderEngine = false; std::atomic<int> mRemainingEarlyFrameCount = 0; }; diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp index 5744266026..23281c2757 100644 --- a/services/surfaceflinger/SurfaceFlinger.cpp +++ b/services/surfaceflinger/SurfaceFlinger.cpp @@ -3372,11 +3372,11 @@ uint32_t SurfaceFlinger::getTransactionFlags(uint32_t flags) { } uint32_t SurfaceFlinger::setTransactionFlags(uint32_t flags) { - return setTransactionFlags(flags, VSyncModulator::TransactionStart::NORMAL); + return setTransactionFlags(flags, Scheduler::TransactionStart::NORMAL); } uint32_t SurfaceFlinger::setTransactionFlags(uint32_t flags, - VSyncModulator::TransactionStart transactionStart) { + Scheduler::TransactionStart transactionStart) { uint32_t old = mTransactionFlags.fetch_or(flags); mVsyncModulator.setTransactionStart(transactionStart); if ((old & flags)==0) { // wake the server up @@ -3467,9 +3467,8 @@ void SurfaceFlinger::setTransactionState( } // this triggers the transaction - const auto start = (flags & eEarlyWakeup) - ? VSyncModulator::TransactionStart::EARLY - : VSyncModulator::TransactionStart::NORMAL; + const auto start = (flags & eEarlyWakeup) ? Scheduler::TransactionStart::EARLY + : Scheduler::TransactionStart::NORMAL; setTransactionFlags(transactionFlags, start); // if this is a synchronous transaction, wait for it to take effect diff --git a/services/surfaceflinger/SurfaceFlinger.h b/services/surfaceflinger/SurfaceFlinger.h index a0f7c7525e..19dcee7abd 100644 --- a/services/surfaceflinger/SurfaceFlinger.h +++ b/services/surfaceflinger/SurfaceFlinger.h @@ -523,7 +523,7 @@ private: uint32_t peekTransactionFlags(); // Can only be called from the main thread or with mStateLock held uint32_t setTransactionFlags(uint32_t flags); - uint32_t setTransactionFlags(uint32_t flags, VSyncModulator::TransactionStart transactionStart); + uint32_t setTransactionFlags(uint32_t flags, Scheduler::TransactionStart transactionStart); void commitTransaction(); bool containsAnyInvalidClientState(const Vector<ComposerState>& states); uint32_t setClientStateLocked(const ComposerState& composerState); |