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

Commit 7110dc0c authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Automerger Merge Worker
Browse files

Merge "Disable ADPF CPU hints for SF unless active display is on" into tm-qpr-dev am: 0d6f11f9

parents 5d8b02d1 0d6f11f9
Loading
Loading
Loading
Loading
+5 −1
Original line number Diff line number Diff line
@@ -2085,7 +2085,11 @@ bool SurfaceFlinger::commit(nsecs_t frameTime, int64_t vsyncId, nsecs_t expected
    }

    // Save this once per commit + composite to ensure consistency
    mPowerHintSessionEnabled = mPowerAdvisor->usePowerHintSession();
    // TODO (b/240619471): consider removing active display check once AOD is fixed
    const auto activeDisplay =
            FTL_FAKE_GUARD(mStateLock, getDisplayDeviceLocked(mActiveDisplayToken));
    mPowerHintSessionEnabled = mPowerAdvisor->usePowerHintSession() && activeDisplay &&
            activeDisplay->getPowerMode() == hal::PowerMode::ON;
    if (mPowerHintSessionEnabled) {
        const auto& display = FTL_FAKE_GUARD(mStateLock, getDefaultDisplayDeviceLocked()).get();
        // get stable vsync period from display mode
+24 −0
Original line number Diff line number Diff line
@@ -97,6 +97,7 @@ void SurfaceFlingerPowerHintTest::SetUp() {
                    .setNativeWindow(mNativeWindow)
                    .setPowerMode(hal::PowerMode::ON)
                    .inject();
    mFlinger.mutableActiveDisplayToken() = mDisplay->getDisplayToken();
}

void SurfaceFlingerPowerHintTest::setupScheduler() {
@@ -148,5 +149,28 @@ TEST_F(SurfaceFlingerPowerHintTest, sendDurationsIncludingHwcWaitTime) {
    mFlinger.commitAndComposite(now, kVsyncId, now + mockVsyncPeriod.count());
}

TEST_F(SurfaceFlingerPowerHintTest, inactiveOnDisplayDoze) {
    ON_CALL(*mPowerAdvisor, usePowerHintSession()).WillByDefault(Return(true));

    mDisplay->setPowerMode(hal::PowerMode::DOZE);

    const std::chrono::nanoseconds mockVsyncPeriod = 15ms;
    EXPECT_CALL(*mPowerAdvisor, setTargetWorkDuration(_)).Times(0);

    const nsecs_t now = systemTime();
    const std::chrono::nanoseconds mockHwcRunTime = 20ms;
    EXPECT_CALL(*mDisplaySurface,
                prepareFrame(compositionengine::DisplaySurface::CompositionType::Hwc))
            .Times(1);
    EXPECT_CALL(*mComposer, presentOrValidateDisplay(HWC_DISPLAY, _, _, _, _, _))
            .WillOnce([mockHwcRunTime] {
                std::this_thread::sleep_for(mockHwcRunTime);
                return hardware::graphics::composer::V2_1::Error::NONE;
            });
    EXPECT_CALL(*mPowerAdvisor, sendActualWorkDuration()).Times(0);
    static constexpr bool kVsyncId = 123; // arbitrary
    mFlinger.commitAndComposite(now, kVsyncId, now + mockVsyncPeriod.count());
}

} // namespace
} // namespace android