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

Commit af854add authored by Ying Wei's avatar Ying Wei
Browse files

Correct SF frame interval.

When SF fps doesn't match vsync rate (either due to vrr or frame rate
override), the frame interval calculation in Scheduler should take this
into account.

Bug: 328352850
Test: atest CtsSurfaceControlTests
Test: atest libsurfaceflinger_unittest
Test: atest FrameRateOverrideTest
Change-Id: I3261c7f2245fcb64c3e79bb3dcb21f1b0e44a395
parent 9cf64484
Loading
Loading
Loading
Loading
+5 −2
Original line number Diff line number Diff line
@@ -306,8 +306,11 @@ Period Scheduler::getVsyncPeriod(uid_t uid) {
        const auto pacesetterOpt = pacesetterDisplayLocked();
        LOG_ALWAYS_FATAL_IF(!pacesetterOpt);
        const Display& pacesetter = *pacesetterOpt;
        return std::make_pair(pacesetter.selectorPtr->getActiveMode().fps,
                              pacesetter.schedulePtr->period());
        const FrameRateMode& frameRateMode = pacesetter.selectorPtr->getActiveMode();
        const auto refreshRate = frameRateMode.fps;
        const auto displayVsync = frameRateMode.modePtr->getVsyncRate();
        const auto numPeriod = RefreshRateSelector::getFrameRateDivisor(displayVsync, refreshRate);
        return std::make_pair(refreshRate, numPeriod * pacesetter.schedulePtr->period());
    }();

    const Period currentPeriod = period != Period::zero() ? period : refreshRate.getPeriod();
+1 −0
Original line number Diff line number Diff line
@@ -437,6 +437,7 @@ private:

    // IEventThreadCallback overrides
    bool throttleVsync(TimePoint, uid_t) override;
    // Get frame interval
    Period getVsyncPeriod(uid_t) override EXCLUDES(mDisplayLock);
    void resync() override EXCLUDES(mDisplayLock);
    void onExpectedPresentTimePosted(TimePoint expectedPresentTime) override EXCLUDES(mDisplayLock);