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

Commit 47c8085a authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "DO NOT MERGE Extend mPreviousPresentFences for high refresh rate" into aosp-24Q3-ts-dev

parents 7d410939 68e90f1b
Loading
Loading
Loading
Loading
+14 −1
Original line number Original line Diff line number Diff line
@@ -106,7 +106,8 @@ protected:
        FenceTimePtr fenceTime = FenceTime::NO_FENCE;
        FenceTimePtr fenceTime = FenceTime::NO_FENCE;
        TimePoint expectedPresentTime = TimePoint();
        TimePoint expectedPresentTime = TimePoint();
    };
    };
    std::array<FenceWithFenceTime, 2> mPresentFences;
    // size should be longest sf-duration / shortest vsync period and round up
    std::array<FenceWithFenceTime, 5> mPresentFences; // currently consider 166hz.
    utils::RingBuffer<FenceWithFenceTime, 5> mFenceWithFenceTimes;
    utils::RingBuffer<FenceWithFenceTime, 5> mFenceWithFenceTimes;


    TimePoint mLastSignaledFrameTime;
    TimePoint mLastSignaledFrameTime;
@@ -131,6 +132,18 @@ private:
        }
        }
        return pastFenceTimePtr;
        return pastFenceTimePtr;
    }
    }

    size_t getPresentFenceShift(Period minFramePeriod) const {
        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;
    }
};
};


// Computes a display's per-frame metrics about past/upcoming targeting of present deadlines.
// Computes a display's per-frame metrics about past/upcoming targeting of present deadlines.
+8 −4
Original line number Original line Diff line number Diff line
@@ -30,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 int shift = static_cast<int>(targetsVsyncsAhead<2>(minFramePeriod));
    const size_t shift = getPresentFenceShift(minFramePeriod);
    return mExpectedPresentTime - Period::fromNs(minFramePeriod.ns() << shift);
    return mExpectedPresentTime - Period::fromNs(minFramePeriod.ns() << shift);
}
}


@@ -38,8 +38,10 @@ 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));

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


bool FrameTarget::wouldPresentEarly(Period minFramePeriod) const {
bool FrameTarget::wouldPresentEarly(Period minFramePeriod) const {
@@ -151,7 +153,9 @@ 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 {
        mPresentFences[1] = mPresentFences[0];
        for (size_t i = mPresentFences.size()-1; i >= 1; i--) {
            mPresentFences[i] = mPresentFences[i-1];
        }
        mPresentFences[0] = {std::move(presentFence), presentFenceTime, mExpectedPresentTime};
        mPresentFences[0] = {std::move(presentFence), presentFenceTime, mExpectedPresentTime};
    }
    }
    return presentFenceTime;
    return presentFenceTime;