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

Commit 45ed7a82 authored by Ady Abraham's avatar Ady Abraham
Browse files

SF: VsyncTimeline was added twice

This CL fixes the issue where VsyncTimeline was added twice.

Fixes: 329310308
Test: presubmit
Change-Id: I8cc574f3f2fe6f7e68149108cc3bcf507e798a37
parent fc2deb96
Loading
Loading
Loading
Loading
+8 −3
Original line number Diff line number Diff line
@@ -377,15 +377,20 @@ void VSyncPredictor::setRenderRate(Fps renderRate, bool applyImmediately) {
    mRenderRateOpt = renderRate;
    const auto renderPeriodDelta =
            prevRenderRate ? prevRenderRate->getPeriodNsecs() - renderRate.getPeriodNsecs() : 0;
    const bool newRenderRateIsHigher = renderPeriodDelta > renderRate.getPeriodNsecs() &&
            mLastCommittedVsync.ns() - mClock->now() > 2 * renderRate.getPeriodNsecs();
    if (applyImmediately) {
        ATRACE_FORMAT_INSTANT("applyImmediately");
        while (mTimelines.size() > 1) {
            mTimelines.pop_front();
        }

        mTimelines.front().setRenderRate(renderRate);
    } else if (newRenderRateIsHigher) {
        return;
    }

    const bool newRenderRateIsHigher = renderPeriodDelta > renderRate.getPeriodNsecs() &&
            mLastCommittedVsync.ns() - mClock->now() > 2 * renderRate.getPeriodNsecs();
    if (newRenderRateIsHigher) {
        ATRACE_FORMAT_INSTANT("newRenderRateIsHigher");
        mTimelines.clear();
        mLastCommittedVsync = TimePoint::fromNs(0);

+21 −0
Original line number Diff line number Diff line
@@ -944,6 +944,27 @@ TEST_F(VSyncPredictorTest, renderRateIsPreservedForCommittedVsyncs) {
    EXPECT_THAT(tracker.nextAnticipatedVSyncTimeFrom(6001), Eq(8000));
}

// b/329310308
TEST_F(VSyncPredictorTest, renderRateChangeAfterAppliedImmediately) {
    tracker.addVsyncTimestamp(1000);

    EXPECT_THAT(tracker.nextAnticipatedVSyncTimeFrom(1), Eq(1000));
    EXPECT_THAT(tracker.nextAnticipatedVSyncTimeFrom(1001), Eq(2000));
    EXPECT_THAT(tracker.nextAnticipatedVSyncTimeFrom(2001), Eq(3000));

    tracker.setRenderRate(Fps::fromPeriodNsecs(2000), /*applyImmediately*/ true);
    EXPECT_THAT(tracker.nextAnticipatedVSyncTimeFrom(1), Eq(1000));
    EXPECT_THAT(tracker.nextAnticipatedVSyncTimeFrom(1001), Eq(3000));
    EXPECT_THAT(tracker.nextAnticipatedVSyncTimeFrom(3001), Eq(5000));

    tracker.setRenderRate(Fps::fromPeriodNsecs(4000), /*applyImmediately*/ false);
    EXPECT_THAT(tracker.nextAnticipatedVSyncTimeFrom(1), Eq(1000));
    EXPECT_THAT(tracker.nextAnticipatedVSyncTimeFrom(1001), Eq(3000));
    EXPECT_THAT(tracker.nextAnticipatedVSyncTimeFrom(3001), Eq(5000));
    EXPECT_THAT(tracker.nextAnticipatedVSyncTimeFrom(5001), Eq(9000));
    EXPECT_THAT(tracker.nextAnticipatedVSyncTimeFrom(9001), Eq(13000));
}

} // namespace android::scheduler

// TODO(b/129481165): remove the #pragma below and fix conversion issues