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

Commit 1bcf5292 authored by Ady Abraham's avatar Ady Abraham Committed by ramindani
Browse files

SF: change the min supported frame rate to 1Hz

Divided the long running tests into multiple tests,
so these tests don't take as much time and can finish
with the increased number of refresh rate ranges.
Updated the tests in the next cl to check over the
range of refresh rates from the start and end.

Test: atest libsurfaceflinger_unittest
BUG: 261520501
Change-Id: I7cd197c39d4482cedbf54e7ddf0d7450e808a289
parent bfdbff01
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -61,7 +61,7 @@ public:
            std::chrono::nanoseconds(800us).count();

    // The lowest Render Frame Rate that will ever be selected
    static constexpr Fps kMinSupportedFrameRate = 20_Hz;
    static constexpr Fps kMinSupportedFrameRate = 1_Hz;

    class Policy {
        static constexpr int kAllowGroupSwitchingDefault = false;
+167 −15
Original line number Diff line number Diff line
@@ -141,6 +141,12 @@ protected:
    RefreshRateSelectorTest();
    ~RefreshRateSelectorTest();

    // Represents the number of refresh rates possible
    // from 1_Hz to 90_hz, including fractional rates.
    static constexpr size_t kTotalRefreshRates120 = 120;
    // Represents the number of refresh rates possible
    // from 1_Hz to 120_hz, including fractional rates.
    static constexpr size_t kTotalRefreshRates216 = 216;
    static constexpr DisplayModeId kModeId60{0};
    static constexpr DisplayModeId kModeId90{1};
    static constexpr DisplayModeId kModeId72{2};
@@ -1129,7 +1135,12 @@ TEST_P(RefreshRateSelectorTest, getMaxRefreshRatesByPolicy) {
                return {{90_Hz, kMode90}, {60_Hz, kMode60}, {45_Hz, kMode90}, {30_Hz, kMode30}};
        }
    }();

    if (GetParam() == Config::FrameRateOverride::Enabled) {
        ASSERT_EQ(kTotalRefreshRates120, refreshRates.size());
    } else {
        ASSERT_EQ(expectedRefreshRates.size(), refreshRates.size());
    }

    for (size_t i = 0; i < expectedRefreshRates.size(); ++i) {
        EXPECT_EQ(expectedRefreshRates[i], refreshRates[i].frameRateMode)
@@ -1155,10 +1166,18 @@ TEST_P(RefreshRateSelectorTest, getMinRefreshRatesByPolicy) {
            case Config::FrameRateOverride::AppOverride:
                return {{30_Hz, kMode30}, {60_Hz, kMode60}, {90_Hz, kMode90}};
            case Config::FrameRateOverride::Enabled:
                return {{30_Hz, kMode30}, {45_Hz, kMode90}, {60_Hz, kMode60}, {90_Hz, kMode90}};
                return {{1_Hz, kMode30},
                        {1.011_Hz, kMode90},
                        {1.016_Hz, kMode60},
                        {1.022_Hz, kMode90}};
        }
    }();

    if (GetParam() == Config::FrameRateOverride::Enabled) {
        ASSERT_EQ(kTotalRefreshRates120, refreshRates.size());
    } else {
        ASSERT_EQ(expectedRefreshRates.size(), refreshRates.size());
    }

    for (size_t i = 0; i < expectedRefreshRates.size(); ++i) {
        EXPECT_EQ(expectedRefreshRates[i], refreshRates[i].frameRateMode)
@@ -1250,7 +1269,12 @@ TEST_P(RefreshRateSelectorTest, powerOnImminentConsidered) {
                        {30_Hz, kMode60}, {22.5_Hz, kMode90}, {20_Hz, kMode60}};
        }
    }();

    if (GetParam() == Config::FrameRateOverride::Enabled) {
        ASSERT_EQ(kTotalRefreshRates120, refreshRates.size());
    } else {
        ASSERT_EQ(expectedRefreshRates.size(), refreshRates.size());
    }

    for (size_t i = 0; i < expectedRefreshRates.size(); ++i) {
        EXPECT_EQ(expectedRefreshRates[i], refreshRates[i].frameRateMode)
@@ -1264,7 +1288,11 @@ TEST_P(RefreshRateSelectorTest, powerOnImminentConsidered) {
            selector.getRankedRefreshRatesAsPair({}, {.powerOnImminent = true});
    EXPECT_TRUE(signals.powerOnImminent);

    if (GetParam() == Config::FrameRateOverride::Enabled) {
        ASSERT_EQ(kTotalRefreshRates120, refreshRates.size());
    } else {
        ASSERT_EQ(expectedRefreshRates.size(), refreshRates.size());
    }

    for (size_t i = 0; i < expectedRefreshRates.size(); ++i) {
        EXPECT_EQ(expectedRefreshRates[i], refreshRates[i].frameRateMode)
@@ -1284,7 +1312,11 @@ TEST_P(RefreshRateSelectorTest, powerOnImminentConsidered) {
            selector.getRankedRefreshRatesAsPair(layers, {.powerOnImminent = true});
    EXPECT_TRUE(signals.powerOnImminent);

    if (GetParam() == Config::FrameRateOverride::Enabled) {
        ASSERT_EQ(kTotalRefreshRates120, refreshRates.size());
    } else {
        ASSERT_EQ(expectedRefreshRates.size(), refreshRates.size());
    }

    for (size_t i = 0; i < expectedRefreshRates.size(); ++i) {
        EXPECT_EQ(expectedRefreshRates[i], refreshRates[i].frameRateMode)
@@ -1309,7 +1341,12 @@ TEST_P(RefreshRateSelectorTest, powerOnImminentConsidered) {
                        {30_Hz, kMode60}, {22.5_Hz, kMode90}, {20_Hz, kMode60}};
        }
    }();

    if (GetParam() == Config::FrameRateOverride::Enabled) {
        ASSERT_EQ(kTotalRefreshRates120, refreshRates.size());
    } else {
        ASSERT_EQ(expectedRefreshRates.size(), refreshRates.size());
    }

    for (size_t i = 0; i < expectedRefreshRates.size(); ++i) {
        EXPECT_EQ(expectedRefreshRates[i], refreshRates[i].frameRateMode)
@@ -1562,7 +1599,11 @@ TEST_P(RefreshRateSelectorTest, testDisplayModeOrdering) {
    }();

    auto actualRanking = selector.getRankedFrameRates(layers, {}).ranking;
    if (GetParam() == Config::FrameRateOverride::Enabled) {
        ASSERT_EQ(kTotalRefreshRates216, actualRanking.size());
    } else {
        ASSERT_EQ(expectedRanking.size(), actualRanking.size());
    }

    for (size_t i = 0; i < expectedRanking.size(); ++i) {
        EXPECT_EQ(expectedRanking[i], actualRanking[i].frameRateMode)
@@ -1604,7 +1645,11 @@ TEST_P(RefreshRateSelectorTest, testDisplayModeOrdering) {
    }();
    actualRanking = selector.getRankedFrameRates(layers, {}).ranking;

    if (GetParam() == Config::FrameRateOverride::Enabled) {
        ASSERT_EQ(kTotalRefreshRates216, actualRanking.size());
    } else {
        ASSERT_EQ(expectedRanking.size(), actualRanking.size());
    }

    for (size_t i = 0; i < expectedRanking.size(); ++i) {
        EXPECT_EQ(expectedRanking[i], actualRanking[i].frameRateMode)
@@ -1644,7 +1689,11 @@ TEST_P(RefreshRateSelectorTest, testDisplayModeOrdering) {
    }();
    actualRanking = selector.getRankedFrameRates(layers, {}).ranking;

    if (GetParam() == Config::FrameRateOverride::Enabled) {
        ASSERT_EQ(kTotalRefreshRates216, actualRanking.size());
    } else {
        ASSERT_EQ(expectedRanking.size(), actualRanking.size());
    }

    for (size_t i = 0; i < expectedRanking.size(); ++i) {
        EXPECT_EQ(expectedRanking[i], actualRanking[i].frameRateMode)
@@ -1687,7 +1736,11 @@ TEST_P(RefreshRateSelectorTest, testDisplayModeOrdering) {
    }();
    actualRanking = selector.getRankedFrameRates(layers, {}).ranking;

    if (GetParam() == Config::FrameRateOverride::Enabled) {
        ASSERT_EQ(kTotalRefreshRates216, actualRanking.size());
    } else {
        ASSERT_EQ(expectedRanking.size(), actualRanking.size());
    }

    for (size_t i = 0; i < expectedRanking.size(); ++i) {
        EXPECT_EQ(expectedRanking[i], actualRanking[i].frameRateMode)
@@ -2317,7 +2370,8 @@ TEST_P(RefreshRateSelectorTest, getBestFrameRateMode_FractionalRefreshRates_Exac
}

// b/190578904
TEST_P(RefreshRateSelectorTest, getBestFrameRateMode_withCloseRefreshRates) {
TEST_P(RefreshRateSelectorTest,
       getBestFrameRateMode_withCloseRefreshRates_LayerVoteType_Heuristic) {
    if (g_noSlowTests) {
        GTEST_SKIP();
    }
@@ -2346,8 +2400,101 @@ TEST_P(RefreshRateSelectorTest, getBestFrameRateMode_withCloseRefreshRates) {
    for (int fps = kMinRefreshRate; fps < kMaxRefreshRate; fps++) {
        const auto refreshRate = Fps::fromValue(static_cast<float>(fps));
        testRefreshRate(refreshRate, LayerVoteType::Heuristic);
    }
}
TEST_P(RefreshRateSelectorTest,
       getBestFrameRateMode_withCloseRefreshRates_LayerVoteType_ExplicitDefault) {
    if (g_noSlowTests) {
        GTEST_SKIP();
    }

    const int kMinRefreshRate = RefreshRateSelector::kMinSupportedFrameRate.getIntValue();
    constexpr int kMaxRefreshRate = 240;

    DisplayModes displayModes;
    for (int fps = kMinRefreshRate; fps < kMaxRefreshRate; fps++) {
        const DisplayModeId modeId(fps);
        displayModes.try_emplace(modeId,
                                 createDisplayMode(modeId,
                                                   Fps::fromValue(static_cast<float>(fps))));
    }

    const auto selector = createSelector(std::move(displayModes), DisplayModeId(kMinRefreshRate));

    std::vector<LayerRequirement> layers = {{.weight = 1.f}};
    const auto testRefreshRate = [&](Fps fps, LayerVoteType vote) {
        layers[0].desiredRefreshRate = fps;
        layers[0].vote = vote;
        EXPECT_EQ(fps.getIntValue(), selector.getBestFrameRateMode(layers)->getFps().getIntValue())
                << "Failed for " << ftl::enum_string(vote);
    };

    for (int fps = kMinRefreshRate; fps < kMaxRefreshRate; fps++) {
        const auto refreshRate = Fps::fromValue(static_cast<float>(fps));
        testRefreshRate(refreshRate, LayerVoteType::ExplicitDefault);
    }
}
TEST_P(RefreshRateSelectorTest,
       getBestFrameRateMode_withCloseRefreshRates_LayerVoteType_ExplicitExactOrMultiple) {
    if (g_noSlowTests) {
        GTEST_SKIP();
    }

    const int kMinRefreshRate = RefreshRateSelector::kMinSupportedFrameRate.getIntValue();
    constexpr int kMaxRefreshRate = 240;

    DisplayModes displayModes;
    for (int fps = kMinRefreshRate; fps < kMaxRefreshRate; fps++) {
        const DisplayModeId modeId(fps);
        displayModes.try_emplace(modeId,
                                 createDisplayMode(modeId,
                                                   Fps::fromValue(static_cast<float>(fps))));
    }

    const auto selector = createSelector(std::move(displayModes), DisplayModeId(kMinRefreshRate));

    std::vector<LayerRequirement> layers = {{.weight = 1.f}};
    const auto testRefreshRate = [&](Fps fps, LayerVoteType vote) {
        layers[0].desiredRefreshRate = fps;
        layers[0].vote = vote;
        EXPECT_EQ(fps.getIntValue(), selector.getBestFrameRateMode(layers)->getFps().getIntValue())
                << "Failed for " << ftl::enum_string(vote);
    };

    for (int fps = kMinRefreshRate; fps < kMaxRefreshRate; fps++) {
        const auto refreshRate = Fps::fromValue(static_cast<float>(fps));
        testRefreshRate(refreshRate, LayerVoteType::ExplicitExactOrMultiple);
    }
}
TEST_P(RefreshRateSelectorTest,
       getBestFrameRateMode_withCloseRefreshRates_LayerVoteType_ExplicitExact) {
    if (g_noSlowTests) {
        GTEST_SKIP();
    }

    const int kMinRefreshRate = RefreshRateSelector::kMinSupportedFrameRate.getIntValue();
    constexpr int kMaxRefreshRate = 240;

    DisplayModes displayModes;
    for (int fps = kMinRefreshRate; fps < kMaxRefreshRate; fps++) {
        const DisplayModeId modeId(fps);
        displayModes.try_emplace(modeId,
                                 createDisplayMode(modeId,
                                                   Fps::fromValue(static_cast<float>(fps))));
    }

    const auto selector = createSelector(std::move(displayModes), DisplayModeId(kMinRefreshRate));

    std::vector<LayerRequirement> layers = {{.weight = 1.f}};
    const auto testRefreshRate = [&](Fps fps, LayerVoteType vote) {
        layers[0].desiredRefreshRate = fps;
        layers[0].vote = vote;
        EXPECT_EQ(fps.getIntValue(), selector.getBestFrameRateMode(layers)->getFps().getIntValue())
                << "Failed for " << ftl::enum_string(vote);
    };

    for (int fps = kMinRefreshRate; fps < kMaxRefreshRate; fps++) {
        const auto refreshRate = Fps::fromValue(static_cast<float>(fps));
        testRefreshRate(refreshRate, LayerVoteType::ExplicitExact);
    }
}
@@ -2807,13 +2954,18 @@ TEST_P(RefreshRateSelectorTest, renderFrameRates) {
                        {90_Hz, 90_Hz},
                        {120_Hz, 120_Hz}};
            case Config::FrameRateOverride::Enabled:
                return {{30_Hz, 30_Hz}, {36_Hz, 72_Hz}, {40_Hz, 120_Hz}, {45_Hz, 90_Hz},
                        {60_Hz, 60_Hz}, {72_Hz, 72_Hz}, {90_Hz, 90_Hz},  {120_Hz, 120_Hz}};
                return {{1_Hz, 30_Hz},       {1.008_Hz, 120_Hz}, {1.011_Hz, 90_Hz},
                        {1.014_Hz, 72_Hz},   {1.016_Hz, 60_Hz},  {1.022_Hz, 90_Hz},
                        {1.0256_Hz, 120_Hz}, {1.028_Hz, 72_Hz}};
        }
    }();

    const auto& primaryRefreshRates = selector.getPrimaryFrameRates();
    if (GetParam() == Config::FrameRateOverride::Enabled) {
        ASSERT_EQ(kTotalRefreshRates216, primaryRefreshRates.size());
    } else {
        ASSERT_EQ(expected.size(), primaryRefreshRates.size());
    }

    for (size_t i = 0; i < expected.size(); i++) {
        const auto [expectedRenderRate, expectedRefreshRate] = expected[i];