Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 92faab86 authored by Ady Abraham's avatar Ady Abraham Committed by Automerger Merge Worker
Browse files

DO NOT MERGE Revert "DO NOT MERGE Extend mPreviousPresentFences for high...

DO NOT MERGE Revert "DO NOT MERGE Extend mPreviousPresentFences for high refresh rate" am: 0ba3f3e4

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/native/+/28926482



Change-Id: I8397f91c25d97a3d8fef879839ccb7163e150927
Signed-off-by: default avatarAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
parents c2eacfbe 0ba3f3e4
Loading
Loading
Loading
Loading
+1 −2
Original line number Original line Diff line number Diff line
@@ -106,8 +106,7 @@ protected:
        FenceTimePtr fenceTime = FenceTime::NO_FENCE;
        FenceTimePtr fenceTime = FenceTime::NO_FENCE;
        TimePoint expectedPresentTime = TimePoint();
        TimePoint expectedPresentTime = TimePoint();
    };
    };
    // size should be longest sf-duration / shortest vsync period and round up
    std::array<FenceWithFenceTime, 2> mPresentFences;
    std::array<FenceWithFenceTime, 5> mPresentFences; // currently consider 166hz.
    utils::RingBuffer<FenceWithFenceTime, 5> mFenceWithFenceTimes;
    utils::RingBuffer<FenceWithFenceTime, 5> mFenceWithFenceTimes;


    TimePoint mLastSignaledFrameTime;
    TimePoint mLastSignaledFrameTime;
+4 −22
Original line number Original line Diff line number Diff line
@@ -20,20 +20,6 @@
#include <scheduler/FrameTargeter.h>
#include <scheduler/FrameTargeter.h>
#include <scheduler/IVsyncSource.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 {
namespace android::scheduler {


FrameTarget::FrameTarget(const std::string& displayLabel)
FrameTarget::FrameTarget(const std::string& displayLabel)
@@ -44,7 +30,7 @@ FrameTarget::FrameTarget(const std::string& displayLabel)


TimePoint FrameTarget::pastVsyncTime(Period minFramePeriod) const {
TimePoint FrameTarget::pastVsyncTime(Period minFramePeriod) const {
    // TODO(b/267315508): Generalize to N VSYNCs.
    // 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);
    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()) {
    if (FlagManager::getInstance().allow_n_vsyncs_in_targeter()) {
        return pastVsyncTimePtr();
        return pastVsyncTimePtr();
    }
    }

    const size_t i = static_cast<size_t>(targetsVsyncsAhead<2>(minFramePeriod));
    const size_t shift = getPresentFenceShift(minFramePeriod);
    return mPresentFences[i].fenceTime;
    ATRACE_FORMAT("mPresentFences shift=%zu", shift);
    return mPresentFences[shift].fenceTime;
}
}


bool FrameTarget::wouldPresentEarly(Period minFramePeriod) const {
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()) {
    if (FlagManager::getInstance().allow_n_vsyncs_in_targeter()) {
        addFence(std::move(presentFence), presentFenceTime, mExpectedPresentTime);
        addFence(std::move(presentFence), presentFenceTime, mExpectedPresentTime);
    } else {
    } else {
        for (size_t i = mPreviousPresentFences.size()-1; i >= 1; i--) {
        mPresentFences[1] = mPresentFences[0];
            mPresentFences[i] = mPresentFences[i-1];
        }
        mPresentFences[0] = {std::move(presentFence), presentFenceTime, mExpectedPresentTime};
        mPresentFences[0] = {std::move(presentFence), presentFenceTime, mExpectedPresentTime};
    }
    }
    return presentFenceTime;
    return presentFenceTime;