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

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

Merge "SF: VsyncTimeline::isVSyncInPhase should use display rate" into main

parents 8e0b4895 4a719e88
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -737,7 +737,9 @@ bool VSyncPredictor::VsyncTimeline::isVSyncInPhase(Model model, nsecs_t vsync, F
        return ticks<std::milli, float>(TimePoint::fromNs(timePoint) - now);
    };

    Fps displayFps = mRenderRateOpt ? *mRenderRateOpt : Fps::fromPeriodNsecs(mIdealPeriod.ns());
    Fps displayFps = !FlagManager::getInstance().vrr_bugfix_24q4() && mRenderRateOpt
            ? *mRenderRateOpt
            : Fps::fromPeriodNsecs(mIdealPeriod.ns());
    const auto divisor = RefreshRateSelector::getFrameRateDivisor(displayFps, frameRate);
    const auto now = TimePoint::now();

+22 −0
Original line number Diff line number Diff line
@@ -535,6 +535,28 @@ TEST_F(VSyncPredictorTest, isVSyncInPhase) {
    }
}

TEST_F(VSyncPredictorTest, isVSyncInPhaseWithRenderRate) {
    SET_FLAG_FOR_TEST(flags::vrr_bugfix_24q4, true);
    auto last = mNow;
    for (auto i = 0u; i < kMinimumSamplesForPrediction; i++) {
        EXPECT_THAT(tracker.nextAnticipatedVSyncTimeFrom(mNow), Eq(last + mPeriod));
        mNow += mPeriod;
        last = mNow;
        tracker.addVsyncTimestamp(mNow);
    }

    EXPECT_THAT(tracker.nextAnticipatedVSyncTimeFrom(mNow), Eq(mNow + mPeriod));
    EXPECT_THAT(tracker.nextAnticipatedVSyncTimeFrom(mNow + mPeriod), Eq(mNow + 2 * mPeriod));

    const auto renderRateFps = Fps::fromPeriodNsecs(mPeriod * 2);
    tracker.setRenderRate(renderRateFps, /*applyImmediately*/ true);

    EXPECT_FALSE(tracker.isVSyncInPhase(mNow, renderRateFps));
    EXPECT_TRUE(tracker.isVSyncInPhase(mNow + mPeriod, renderRateFps));
    EXPECT_FALSE(tracker.isVSyncInPhase(mNow + 2 * mPeriod, renderRateFps));
    EXPECT_TRUE(tracker.isVSyncInPhase(mNow + 3 * mPeriod, renderRateFps));
}

TEST_F(VSyncPredictorTest, isVSyncInPhaseForDivisors) {
    auto last = mNow;
    for (auto i = 0u; i < kMinimumSamplesForPrediction; i++) {