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

Commit 75f37254 authored by Marin Shalamanov's avatar Marin Shalamanov
Browse files

SF: Reset RefreshRateConfigs policy when modes change

When the display modes change the old display policy may
no longer be valid, so we need reset it. This CL also adds
a test for the broken scenario.

Bug: 159590486

Test: atest RefreshRateConfigs
Test: manually 0. device boots in 60hz mode
               1. switch to 50hz from app
               2. disconnect display
               3. reconnect display
               4. verify that SF doesn't crash
Change-Id: Ib935fb4ebce241c4771ffef75b102741e51b96c0
parent 93be444a
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -627,6 +627,8 @@ void RefreshRateConfigs::updateDisplayModes(const DisplayModes& modes,

    std::vector<const RefreshRate*> sortedModes;
    getSortedRefreshRateListLocked([](const RefreshRate&) { return true; }, &sortedModes);
    // Reset the policy because the old one may no longer be valid.
    mDisplayManagerPolicy = {};
    mDisplayManagerPolicy.defaultMode = currentModeId;
    mMinSupportedRefreshRate = sortedModes.front();
    mMaxSupportedRefreshRate = sortedModes.back();
+20 −0
Original line number Diff line number Diff line
@@ -1792,6 +1792,26 @@ TEST_F(RefreshRateConfigsTest, getFrameRateOverrides_touch) {
    ASSERT_TRUE(frameRateOverrides.empty());
}

TEST_F(RefreshRateConfigsTest, updateDisplayModes) {
    auto refreshRateConfigs =
            std::make_unique<RefreshRateConfigs>(m30_60_72_90_120Device,
                                                 /*currentConfigId=*/HWC_CONFIG_ID_30);
    refreshRateConfigs->setDisplayManagerPolicy({DisplayModeId(HWC_CONFIG_ID_30),
                                                 /* allowGroupSwitching */ false,
                                                 /* range */ {Fps(30.0f), Fps(30.0f)}});

    refreshRateConfigs->updateDisplayModes(m60_90Device, HWC_CONFIG_ID_60);

    const auto currentRefreshRate = refreshRateConfigs->getCurrentRefreshRate();
    EXPECT_TRUE(currentRefreshRate.getFps().equalsWithMargin(Fps(60.0)));
    EXPECT_EQ(currentRefreshRate.getModeId(), HWC_CONFIG_ID_60);

    EXPECT_TRUE(
            getMaxSupportedRefreshRate(*refreshRateConfigs).getFps().equalsWithMargin(Fps(90.0)));
    EXPECT_TRUE(
            getMinSupportedRefreshRate(*refreshRateConfigs).getFps().equalsWithMargin(Fps(60.0)));
}

} // namespace
} // namespace scheduler
} // namespace android