diff options
| author | 2022-12-09 04:08:57 +0000 | |
|---|---|---|
| committer | 2022-12-16 15:06:37 -0800 | |
| commit | 1bcf5292d51d432842d603c56fc9f519ee58687f (patch) | |
| tree | b3bb5cb9ae49799aa491f15aa7c4ae89da93b415 | |
| parent | bfdbff01f83619232a7d7edee6d20192e67bf7ce (diff) | |
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
| -rw-r--r-- | services/surfaceflinger/Scheduler/RefreshRateSelector.h | 2 | ||||
| -rw-r--r-- | services/surfaceflinger/tests/unittests/RefreshRateSelectorTest.cpp | 182 |
2 files changed, 168 insertions, 16 deletions
diff --git a/services/surfaceflinger/Scheduler/RefreshRateSelector.h b/services/surfaceflinger/Scheduler/RefreshRateSelector.h index 4f5842a67a..14d08f85e2 100644 --- a/services/surfaceflinger/Scheduler/RefreshRateSelector.h +++ b/services/surfaceflinger/Scheduler/RefreshRateSelector.h @@ -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; diff --git a/services/surfaceflinger/tests/unittests/RefreshRateSelectorTest.cpp b/services/surfaceflinger/tests/unittests/RefreshRateSelectorTest.cpp index a3b3c4cf58..79d02dd512 100644 --- a/services/surfaceflinger/tests/unittests/RefreshRateSelectorTest.cpp +++ b/services/surfaceflinger/tests/unittests/RefreshRateSelectorTest.cpp @@ -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}}; } }(); - ASSERT_EQ(expectedRefreshRates.size(), refreshRates.size()); + + 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}}; } }(); - ASSERT_EQ(expectedRefreshRates.size(), refreshRates.size()); + + 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}}; } }(); - ASSERT_EQ(expectedRefreshRates.size(), refreshRates.size()); + + 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); - ASSERT_EQ(expectedRefreshRates.size(), refreshRates.size()); + 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); - ASSERT_EQ(expectedRefreshRates.size(), refreshRates.size()); + 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}}; } }(); - ASSERT_EQ(expectedRefreshRates.size(), refreshRates.size()); + + 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; - ASSERT_EQ(expectedRanking.size(), actualRanking.size()); + 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; - ASSERT_EQ(expectedRanking.size(), actualRanking.size()); + 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; - ASSERT_EQ(expectedRanking.size(), actualRanking.size()); + 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; - ASSERT_EQ(expectedRanking.size(), actualRanking.size()); + 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(); - ASSERT_EQ(expected.size(), primaryRefreshRates.size()); + 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]; |