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

Commit 61dfca4b authored by Dominik Laskowski's avatar Dominik Laskowski
Browse files

SF: Fix ADPF regression due to wrong present fence

Partially revert Ib114ffc1866aa32e6d493e06dcf5a27652d19a39.

PowerAdvisor needs the present fence of the previous frame, as the query
happens after presenting the current frame so should not be adjusted for
targeting 2 VSYNCs ahead.

Fixes: 283189729
Test: Perfetto
Change-Id: Ifbd6aa961bc92fe1d2f4de1247413fcd49330645
parent b94c0268
Loading
Loading
Loading
Loading
+7 −4
Original line number Diff line number Diff line
@@ -2674,12 +2674,15 @@ void SurfaceFlinger::composite(TimePoint frameTime, VsyncId vsyncId)

    mTimeStats->recordFrameDuration(frameTime.ns(), systemTime());

    // Send a power hint hint after presentation is finished
    // Send a power hint after presentation is finished.
    if (mPowerHintSessionEnabled) {
        const nsecs_t pastPresentTime =
                getPreviousPresentFence(frameTime, vsyncPeriod)->getSignalTime();
        // Now that the current frame has been presented above, PowerAdvisor needs the present time
        // of the previous frame (whose fence is signaled by now) to determine how long the HWC had
        // waited on that fence to retire before presenting.
        const auto& previousPresentFence = mPreviousPresentFences[0].fenceTime;

        mPowerAdvisor->setSfPresentTiming(TimePoint::fromNs(pastPresentTime), TimePoint::now());
        mPowerAdvisor->setSfPresentTiming(TimePoint::fromNs(previousPresentFence->getSignalTime()),
                                          TimePoint::now());
        mPowerAdvisor->reportActualWorkDuration();
    }