diff options
| -rw-r--r-- | libs/gui/SurfaceComposerClient.cpp | 55 | ||||
| -rw-r--r-- | libs/gui/include/gui/ISurfaceComposer.h | 9 | ||||
| -rw-r--r-- | libs/gui/include/gui/SurfaceComposerClient.h | 10 | ||||
| -rw-r--r-- | services/surfaceflinger/Scheduler/VsyncModulator.cpp | 19 | ||||
| -rw-r--r-- | services/surfaceflinger/Scheduler/VsyncModulator.h | 3 | ||||
| -rw-r--r-- | services/surfaceflinger/SurfaceFlinger.cpp | 16 | ||||
| -rw-r--r-- | services/surfaceflinger/tests/unittests/VsyncModulatorTest.cpp | 18 |
7 files changed, 43 insertions, 87 deletions
diff --git a/libs/gui/SurfaceComposerClient.cpp b/libs/gui/SurfaceComposerClient.cpp index 11fe49039d..95c961ef3e 100644 --- a/libs/gui/SurfaceComposerClient.cpp +++ b/libs/gui/SurfaceComposerClient.cpp @@ -470,9 +470,8 @@ SurfaceComposerClient::Transaction::Transaction(const Transaction& other) mForceSynchronous(other.mForceSynchronous), mTransactionNestCount(other.mTransactionNestCount), mAnimation(other.mAnimation), - mEarlyWakeup(other.mEarlyWakeup), - mExplicitEarlyWakeupStart(other.mExplicitEarlyWakeupStart), - mExplicitEarlyWakeupEnd(other.mExplicitEarlyWakeupEnd), + mEarlyWakeupStart(other.mEarlyWakeupStart), + mEarlyWakeupEnd(other.mEarlyWakeupEnd), mContainsBuffer(other.mContainsBuffer), mDesiredPresentTime(other.mDesiredPresentTime), mIsAutoTimestamp(other.mIsAutoTimestamp), @@ -501,9 +500,8 @@ status_t SurfaceComposerClient::Transaction::readFromParcel(const Parcel* parcel const uint32_t forceSynchronous = parcel->readUint32(); const uint32_t transactionNestCount = parcel->readUint32(); const bool animation = parcel->readBool(); - const bool earlyWakeup = parcel->readBool(); - const bool explicitEarlyWakeupStart = parcel->readBool(); - const bool explicitEarlyWakeupEnd = parcel->readBool(); + const bool earlyWakeupStart = parcel->readBool(); + const bool earlyWakeupEnd = parcel->readBool(); const bool containsBuffer = parcel->readBool(); const int64_t desiredPresentTime = parcel->readInt64(); const bool isAutoTimestamp = parcel->readBool(); @@ -578,9 +576,8 @@ status_t SurfaceComposerClient::Transaction::readFromParcel(const Parcel* parcel mForceSynchronous = forceSynchronous; mTransactionNestCount = transactionNestCount; mAnimation = animation; - mEarlyWakeup = earlyWakeup; - mExplicitEarlyWakeupStart = explicitEarlyWakeupStart; - mExplicitEarlyWakeupEnd = explicitEarlyWakeupEnd; + mEarlyWakeupStart = earlyWakeupStart; + mEarlyWakeupEnd = earlyWakeupEnd; mContainsBuffer = containsBuffer; mDesiredPresentTime = desiredPresentTime; mIsAutoTimestamp = isAutoTimestamp; @@ -610,9 +607,8 @@ status_t SurfaceComposerClient::Transaction::writeToParcel(Parcel* parcel) const parcel->writeUint32(mForceSynchronous); parcel->writeUint32(mTransactionNestCount); parcel->writeBool(mAnimation); - parcel->writeBool(mEarlyWakeup); - parcel->writeBool(mExplicitEarlyWakeupStart); - parcel->writeBool(mExplicitEarlyWakeupEnd); + parcel->writeBool(mEarlyWakeupStart); + parcel->writeBool(mEarlyWakeupEnd); parcel->writeBool(mContainsBuffer); parcel->writeInt64(mDesiredPresentTime); parcel->writeBool(mIsAutoTimestamp); @@ -690,9 +686,8 @@ SurfaceComposerClient::Transaction& SurfaceComposerClient::Transaction::merge(Tr mInputWindowCommands.merge(other.mInputWindowCommands); mContainsBuffer |= other.mContainsBuffer; - mEarlyWakeup = mEarlyWakeup || other.mEarlyWakeup; - mExplicitEarlyWakeupStart = mExplicitEarlyWakeupStart || other.mExplicitEarlyWakeupStart; - mExplicitEarlyWakeupEnd = mExplicitEarlyWakeupEnd || other.mExplicitEarlyWakeupEnd; + mEarlyWakeupStart = mEarlyWakeupStart || other.mEarlyWakeupStart; + mEarlyWakeupEnd = mEarlyWakeupEnd || other.mEarlyWakeupEnd; mApplyToken = other.mApplyToken; mFrameTimelineInfo.merge(other.mFrameTimelineInfo); @@ -710,9 +705,8 @@ void SurfaceComposerClient::Transaction::clear() { mForceSynchronous = 0; mTransactionNestCount = 0; mAnimation = false; - mEarlyWakeup = false; - mExplicitEarlyWakeupStart = false; - mExplicitEarlyWakeupEnd = false; + mEarlyWakeupStart = false; + mEarlyWakeupEnd = false; mDesiredPresentTime = 0; mIsAutoTimestamp = true; mFrameTimelineInfo.clear(); @@ -831,17 +825,14 @@ status_t SurfaceComposerClient::Transaction::apply(bool synchronous) { if (mAnimation) { flags |= ISurfaceComposer::eAnimation; } - if (mEarlyWakeup) { - flags |= ISurfaceComposer::eEarlyWakeup; - } - // If both mExplicitEarlyWakeupStart and mExplicitEarlyWakeupEnd are set + // If both mEarlyWakeupStart and mEarlyWakeupEnd are set // it is equivalent for none - if (mExplicitEarlyWakeupStart && !mExplicitEarlyWakeupEnd) { - flags |= ISurfaceComposer::eExplicitEarlyWakeupStart; + if (mEarlyWakeupStart && !mEarlyWakeupEnd) { + flags |= ISurfaceComposer::eEarlyWakeupStart; } - if (mExplicitEarlyWakeupEnd && !mExplicitEarlyWakeupStart) { - flags |= ISurfaceComposer::eExplicitEarlyWakeupEnd; + if (mEarlyWakeupEnd && !mEarlyWakeupStart) { + flags |= ISurfaceComposer::eEarlyWakeupEnd; } sp<IBinder> applyToken = mApplyToken @@ -892,16 +883,12 @@ void SurfaceComposerClient::Transaction::setAnimationTransaction() { mAnimation = true; } -void SurfaceComposerClient::Transaction::setEarlyWakeup() { - mEarlyWakeup = true; -} - -void SurfaceComposerClient::Transaction::setExplicitEarlyWakeupStart() { - mExplicitEarlyWakeupStart = true; +void SurfaceComposerClient::Transaction::setEarlyWakeupStart() { + mEarlyWakeupStart = true; } -void SurfaceComposerClient::Transaction::setExplicitEarlyWakeupEnd() { - mExplicitEarlyWakeupEnd = true; +void SurfaceComposerClient::Transaction::setEarlyWakeupEnd() { + mEarlyWakeupEnd = true; } layer_state_t* SurfaceComposerClient::Transaction::getLayerState(const sp<SurfaceControl>& sc) { diff --git a/libs/gui/include/gui/ISurfaceComposer.h b/libs/gui/include/gui/ISurfaceComposer.h index 2a9e3f7923..35990d171a 100644 --- a/libs/gui/include/gui/ISurfaceComposer.h +++ b/libs/gui/include/gui/ISurfaceComposer.h @@ -90,18 +90,15 @@ public: eSynchronous = 0x01, eAnimation = 0x02, - // DEPRECATED - use eExplicitEarlyWakeup[Start|End] - eEarlyWakeup = 0x04, - // Explicit indication that this transaction and others to follow will likely result in a // lot of layers being composed, and thus, SurfaceFlinger should wake-up earlier to avoid // missing frame deadlines. In this case SurfaceFlinger will wake up at // (sf vsync offset - debug.sf.early_phase_offset_ns). SurfaceFlinger will continue to be - // in the early configuration until it receives eExplicitEarlyWakeupEnd. These flags are + // in the early configuration until it receives eEarlyWakeupEnd. These flags are // expected to be used by WindowManager only and are guarded by // android.permission.ACCESS_SURFACE_FLINGER - eExplicitEarlyWakeupStart = 0x08, - eExplicitEarlyWakeupEnd = 0x10, + eEarlyWakeupStart = 0x08, + eEarlyWakeupEnd = 0x10, }; enum VsyncSource { diff --git a/libs/gui/include/gui/SurfaceComposerClient.h b/libs/gui/include/gui/SurfaceComposerClient.h index f29983cef7..a91de9c645 100644 --- a/libs/gui/include/gui/SurfaceComposerClient.h +++ b/libs/gui/include/gui/SurfaceComposerClient.h @@ -353,9 +353,8 @@ public: uint32_t mForceSynchronous = 0; uint32_t mTransactionNestCount = 0; bool mAnimation = false; - bool mEarlyWakeup = false; - bool mExplicitEarlyWakeupStart = false; - bool mExplicitEarlyWakeupEnd = false; + bool mEarlyWakeupStart = false; + bool mEarlyWakeupEnd = false; // Indicates that the Transaction contains a buffer that should be cached bool mContainsBuffer = false; @@ -567,9 +566,8 @@ public: const Rect& layerStackRect, const Rect& displayRect); void setDisplaySize(const sp<IBinder>& token, uint32_t width, uint32_t height); void setAnimationTransaction(); - void setEarlyWakeup(); - void setExplicitEarlyWakeupStart(); - void setExplicitEarlyWakeupEnd(); + void setEarlyWakeupStart(); + void setEarlyWakeupEnd(); }; status_t clearLayerFrameStats(const sp<IBinder>& token) const; diff --git a/services/surfaceflinger/Scheduler/VsyncModulator.cpp b/services/surfaceflinger/Scheduler/VsyncModulator.cpp index 1f821be504..194d808836 100644 --- a/services/surfaceflinger/Scheduler/VsyncModulator.cpp +++ b/services/surfaceflinger/Scheduler/VsyncModulator.cpp @@ -50,24 +50,23 @@ VsyncModulator::VsyncConfigOpt VsyncModulator::setTransactionSchedule( TransactionSchedule schedule) { switch (schedule) { case Schedule::EarlyStart: - ALOGW_IF(mExplicitEarlyWakeup, "%s: Duplicate EarlyStart", __FUNCTION__); - mExplicitEarlyWakeup = true; + ALOGW_IF(mEarlyWakeup, "%s: Duplicate EarlyStart", __FUNCTION__); + mEarlyWakeup = true; break; case Schedule::EarlyEnd: - ALOGW_IF(!mExplicitEarlyWakeup, "%s: Unexpected EarlyEnd", __FUNCTION__); - mExplicitEarlyWakeup = false; + ALOGW_IF(!mEarlyWakeup, "%s: Unexpected EarlyEnd", __FUNCTION__); + mEarlyWakeup = false; break; - case Schedule::Early: case Schedule::Late: - // No change to mExplicitEarlyWakeup for non-explicit states. + // No change to mEarlyWakeup for non-explicit states. break; } if (mTraceDetailedInfo) { - ATRACE_INT("mExplicitEarlyWakeup", mExplicitEarlyWakeup); + ATRACE_INT("mEarlyWakeup", mEarlyWakeup); } - if (!mExplicitEarlyWakeup && (schedule == Schedule::Early || schedule == Schedule::EarlyEnd)) { + if (!mEarlyWakeup && schedule == Schedule::EarlyEnd) { mEarlyTransactionFrames = MIN_EARLY_TRANSACTION_FRAMES; mEarlyTransactionStartTime = mNow(); } @@ -129,8 +128,8 @@ VsyncModulator::VsyncConfig VsyncModulator::getVsyncConfig() const { const VsyncModulator::VsyncConfig& VsyncModulator::getNextVsyncConfig() const { // Early offsets are used if we're in the middle of a refresh rate // change, or if we recently begin a transaction. - if (mExplicitEarlyWakeup || mTransactionSchedule == Schedule::EarlyEnd || - mEarlyTransactionFrames > 0 || mRefreshRateChangePending) { + if (mEarlyWakeup || mTransactionSchedule == Schedule::EarlyEnd || mEarlyTransactionFrames > 0 || + mRefreshRateChangePending) { return mVsyncConfigSet.early; } else if (mEarlyGpuFrames > 0) { return mVsyncConfigSet.earlyGpu; diff --git a/services/surfaceflinger/Scheduler/VsyncModulator.h b/services/surfaceflinger/Scheduler/VsyncModulator.h index 355a14adf8..fcde279070 100644 --- a/services/surfaceflinger/Scheduler/VsyncModulator.h +++ b/services/surfaceflinger/Scheduler/VsyncModulator.h @@ -30,7 +30,6 @@ namespace android::scheduler { // fixed number of frames, respectively. enum class TransactionSchedule { Late, // Default. - Early, // Deprecated. EarlyStart, EarlyEnd }; @@ -114,7 +113,7 @@ private: using Schedule = TransactionSchedule; std::atomic<Schedule> mTransactionSchedule = Schedule::Late; - std::atomic<bool> mExplicitEarlyWakeup = false; + std::atomic<bool> mEarlyWakeup = false; std::atomic<bool> mRefreshRateChangePending = false; diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp index 940cb58d30..eeb5dd0e6e 100644 --- a/services/surfaceflinger/SurfaceFlinger.cpp +++ b/services/surfaceflinger/SurfaceFlinger.cpp @@ -3476,9 +3476,8 @@ void SurfaceFlinger::queueTransaction(TransactionState& state) { ATRACE_INT("TransactionQueue", mTransactionQueue.size()); const auto schedule = [](uint32_t flags) { - if (flags & eEarlyWakeup) return TransactionSchedule::Early; - if (flags & eExplicitEarlyWakeupEnd) return TransactionSchedule::EarlyEnd; - if (flags & eExplicitEarlyWakeupStart) return TransactionSchedule::EarlyStart; + if (flags & eEarlyWakeupEnd) return TransactionSchedule::EarlyEnd; + if (flags & eEarlyWakeupStart) return TransactionSchedule::EarlyStart; return TransactionSchedule::Late; }(state.flags); @@ -3530,15 +3529,10 @@ status_t SurfaceFlinger::setTransactionState( permissions |= Permission::ROTATE_SURFACE_FLINGER; } - // TODO(b/159125966): Remove eEarlyWakeup completely as no client should use this flag - if (flags & eEarlyWakeup) { - ALOGW("eEarlyWakeup is deprecated. Use eExplicitEarlyWakeup[Start|End]"); - } - if (!(permissions & Permission::ACCESS_SURFACE_FLINGER) && - (flags & (eExplicitEarlyWakeupStart | eExplicitEarlyWakeupEnd))) { - ALOGE("Only WindowManager is allowed to use eExplicitEarlyWakeup[Start|End] flags"); - flags &= ~(eExplicitEarlyWakeupStart | eExplicitEarlyWakeupEnd); + (flags & (eEarlyWakeupStart | eEarlyWakeupEnd))) { + ALOGE("Only WindowManager is allowed to use eEarlyWakeup[Start|End] flags"); + flags &= ~(eEarlyWakeupStart | eEarlyWakeupEnd); } const int64_t postTime = systemTime(); diff --git a/services/surfaceflinger/tests/unittests/VsyncModulatorTest.cpp b/services/surfaceflinger/tests/unittests/VsyncModulatorTest.cpp index 106da81076..17648d532e 100644 --- a/services/surfaceflinger/tests/unittests/VsyncModulatorTest.cpp +++ b/services/surfaceflinger/tests/unittests/VsyncModulatorTest.cpp @@ -101,24 +101,6 @@ TEST_F(VsyncModulatorTest, EarlyStart) { CHECK_REFRESH(1, kLate, kLate); } -TEST_F(VsyncModulatorTest, EarlyStartWithEarly) { - EXPECT_EQ(kEarly, mVsyncModulator.setTransactionSchedule(Schedule::EarlyStart)); - - CHECK_COMMIT(kEarly, kEarly); - CHECK_REFRESH(5 * MIN_EARLY_TRANSACTION_FRAMES, std::nullopt, kEarly); - - EXPECT_EQ(kEarly, mVsyncModulator.setTransactionSchedule(Schedule::Early)); - - CHECK_COMMIT(kEarly, kEarly); - CHECK_REFRESH(5 * MIN_EARLY_TRANSACTION_FRAMES, std::nullopt, kEarly); - - EXPECT_EQ(kEarly, mVsyncModulator.setTransactionSchedule(Schedule::EarlyEnd)); - - CHECK_COMMIT(kEarly, kEarly); - CHECK_REFRESH(MIN_EARLY_TRANSACTION_FRAMES - 1, kEarly, kEarly); - CHECK_REFRESH(1, kLate, kLate); -} - TEST_F(VsyncModulatorTest, EarlyStartWithMoreTransactions) { EXPECT_EQ(kEarly, mVsyncModulator.setTransactionSchedule(Schedule::EarlyStart)); |