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

Commit 3819b9fe authored by Ady Abraham's avatar Ady Abraham
Browse files

SF: Tune RefreshRateConfigs for close refresh rates

Partial cherry-pick of 15a0fc65
to fix seen in CTS

Bug: 196404992
Bug: 196191168
Test: atest CtsDisplayTestCases.android.display.cts.DisplayTest#testModeSwitchOnPrimaryDisplay
Change-Id: I9f8abac183bf6255fed4e2481d22aa3eb42b72ac
Merged-In: I694e2aa5b16e9b4e0f6d1e8263b1ac35099605fd
parent 32ca6e81
Loading
Loading
Loading
Loading
+4 −1
Original line number Original line Diff line number Diff line
@@ -911,7 +911,10 @@ RefreshRateConfigs::KernelIdleTimerAction RefreshRateConfigs::getIdleTimerAction
int RefreshRateConfigs::getFrameRateDivider(Fps displayFrameRate, Fps layerFrameRate) {
int RefreshRateConfigs::getFrameRateDivider(Fps displayFrameRate, Fps layerFrameRate) {
    // This calculation needs to be in sync with the java code
    // This calculation needs to be in sync with the java code
    // in DisplayManagerService.getDisplayInfoForFrameRateOverride
    // in DisplayManagerService.getDisplayInfoForFrameRateOverride
    constexpr float kThreshold = 0.1f;

    // The threshold must be smaller than 0.001 in order to differentiate
    // between the fractional pairs (e.g. 59.94 and 60).
    constexpr float kThreshold = 0.0009f;
    const auto numPeriods = displayFrameRate.getValue() / layerFrameRate.getValue();
    const auto numPeriods = displayFrameRate.getValue() / layerFrameRate.getValue();
    const auto numPeriodsRounded = std::round(numPeriods);
    const auto numPeriodsRounded = std::round(numPeriods);
    if (std::abs(numPeriods - numPeriodsRounded) > kThreshold) {
    if (std::abs(numPeriods - numPeriodsRounded) > kThreshold) {
+5 −1
Original line number Original line Diff line number Diff line
@@ -2123,7 +2123,11 @@ TEST_F(RefreshRateConfigsTest, getFrameRateDivider) {
    refreshRateConfigs->setCurrentModeId(HWC_CONFIG_ID_90);
    refreshRateConfigs->setCurrentModeId(HWC_CONFIG_ID_90);
    displayRefreshRate = refreshRateConfigs->getCurrentRefreshRate().getFps();
    displayRefreshRate = refreshRateConfigs->getCurrentRefreshRate().getFps();
    EXPECT_EQ(4, RefreshRateConfigs::getFrameRateDivider(displayRefreshRate, Fps(22.5f)));
    EXPECT_EQ(4, RefreshRateConfigs::getFrameRateDivider(displayRefreshRate, Fps(22.5f)));
    EXPECT_EQ(4, RefreshRateConfigs::getFrameRateDivider(displayRefreshRate, Fps(22.6f)));

    EXPECT_EQ(0, RefreshRateConfigs::getFrameRateDivider(Fps(24.f), Fps(25.f)));
    EXPECT_EQ(0, RefreshRateConfigs::getFrameRateDivider(Fps(24.f), Fps(23.976f)));
    EXPECT_EQ(0, RefreshRateConfigs::getFrameRateDivider(Fps(30.f), Fps(29.97f)));
    EXPECT_EQ(0, RefreshRateConfigs::getFrameRateDivider(Fps(60.f), Fps(59.94f)));
}
}


TEST_F(RefreshRateConfigsTest, getFrameRateOverrides_noLayers) {
TEST_F(RefreshRateConfigsTest, getFrameRateOverrides_noLayers) {