diff options
author | 2024-08-21 19:38:19 +0000 | |
---|---|---|
committer | 2024-08-21 19:38:19 +0000 | |
commit | 92faab8650cdb20f34a39ccde80cad407a2fe18f (patch) | |
tree | 01b82bcac2918b5ee377647b0c2fd20b6a64075d | |
parent | c2eacfbe69a1f1d22431727e9dc6e8e4557f271f (diff) | |
parent | 0ba3f3e42af40f4d0219e124efba78152b7298b3 (diff) |
DO NOT MERGE Revert "DO NOT MERGE Extend mPreviousPresentFences for high refresh rate" am: 0ba3f3e42a
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/native/+/28926482
Change-Id: I8397f91c25d97a3d8fef879839ccb7163e150927
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
-rw-r--r-- | services/surfaceflinger/Scheduler/include/scheduler/FrameTargeter.h | 3 | ||||
-rw-r--r-- | services/surfaceflinger/Scheduler/src/FrameTargeter.cpp | 26 |
2 files changed, 5 insertions, 24 deletions
diff --git a/services/surfaceflinger/Scheduler/include/scheduler/FrameTargeter.h b/services/surfaceflinger/Scheduler/include/scheduler/FrameTargeter.h index 638a6fb464..d37d2dc51b 100644 --- a/services/surfaceflinger/Scheduler/include/scheduler/FrameTargeter.h +++ b/services/surfaceflinger/Scheduler/include/scheduler/FrameTargeter.h @@ -106,8 +106,7 @@ protected: FenceTimePtr fenceTime = FenceTime::NO_FENCE; TimePoint expectedPresentTime = TimePoint(); }; - // size should be longest sf-duration / shortest vsync period and round up - std::array<FenceWithFenceTime, 5> mPresentFences; // currently consider 166hz. + std::array<FenceWithFenceTime, 2> mPresentFences; utils::RingBuffer<FenceWithFenceTime, 5> mFenceWithFenceTimes; TimePoint mLastSignaledFrameTime; diff --git a/services/surfaceflinger/Scheduler/src/FrameTargeter.cpp b/services/surfaceflinger/Scheduler/src/FrameTargeter.cpp index 063f1b3d1d..badd21ef86 100644 --- a/services/surfaceflinger/Scheduler/src/FrameTargeter.cpp +++ b/services/surfaceflinger/Scheduler/src/FrameTargeter.cpp @@ -20,20 +20,6 @@ #include <scheduler/FrameTargeter.h> #include <scheduler/IVsyncSource.h> -namespace { -size_t getPresentFenceShift(Period minFramePeriod) { - const bool isTwoVsyncsAhead = targetsVsyncsAhead<2>(minFramePeriod); - size_t shift = 0; - if (isTwoVsyncsAhead) { - shift = static_cast<size_t>(expectedFrameDuration.ns() / minFramePeriod.ns()); - if (shift >= mPresentFences.size()) { - shift = mPresentFences.size() - 1; - } - } - return shift; -} -} // namespace - namespace android::scheduler { FrameTarget::FrameTarget(const std::string& displayLabel) @@ -44,7 +30,7 @@ FrameTarget::FrameTarget(const std::string& displayLabel) TimePoint FrameTarget::pastVsyncTime(Period minFramePeriod) const { // TODO(b/267315508): Generalize to N VSYNCs. - const size_t shift = getPresentFenceShift(minFramePeriod); + const int shift = static_cast<int>(targetsVsyncsAhead<2>(minFramePeriod)); return mExpectedPresentTime - Period::fromNs(minFramePeriod.ns() << shift); } @@ -52,10 +38,8 @@ FenceTimePtr FrameTarget::presentFenceForPastVsync(Period minFramePeriod) const if (FlagManager::getInstance().allow_n_vsyncs_in_targeter()) { return pastVsyncTimePtr(); } - - const size_t shift = getPresentFenceShift(minFramePeriod); - ATRACE_FORMAT("mPresentFences shift=%zu", shift); - return mPresentFences[shift].fenceTime; + const size_t i = static_cast<size_t>(targetsVsyncsAhead<2>(minFramePeriod)); + return mPresentFences[i].fenceTime; } bool FrameTarget::wouldPresentEarly(Period minFramePeriod) const { @@ -167,9 +151,7 @@ FenceTimePtr FrameTargeter::setPresentFence(sp<Fence> presentFence, FenceTimePtr if (FlagManager::getInstance().allow_n_vsyncs_in_targeter()) { addFence(std::move(presentFence), presentFenceTime, mExpectedPresentTime); } else { - for (size_t i = mPreviousPresentFences.size()-1; i >= 1; i--) { - mPresentFences[i] = mPresentFences[i-1]; - } + mPresentFences[1] = mPresentFences[0]; mPresentFences[0] = {std::move(presentFence), presentFenceTime, mExpectedPresentTime}; } return presentFenceTime; |