Add the filter to select the refresh rate
This select the refresh rate with max score
and is present on all the displays.
Test: unit test
BUG: 240743471
Change-Id: I66d5b7b258d418daf9734386cd42b3e91482212c
diff --git a/services/surfaceflinger/tests/unittests/SchedulerTest.cpp b/services/surfaceflinger/tests/unittests/SchedulerTest.cpp
index 8d2130f..406d2bc 100644
--- a/services/surfaceflinger/tests/unittests/SchedulerTest.cpp
+++ b/services/surfaceflinger/tests/unittests/SchedulerTest.cpp
@@ -65,6 +65,7 @@
static inline const DisplayModePtr kMode120_1 = createDisplayMode(DisplayModeId(1), 120_Hz);
static inline const DisplayModePtr kMode60_2 = createDisplayMode(DisplayModeId(2), 60_Hz);
static inline const DisplayModePtr kMode120_2 = createDisplayMode(DisplayModeId(3), 120_Hz);
+ static inline const DisplayModePtr kMode60_3 = createDisplayMode(DisplayModeId(4), 60_Hz);
std::shared_ptr<RefreshRateConfigs> mConfigs =
std::make_shared<RefreshRateConfigs>(makeModes(kMode60_1), kMode60_1->getId());
@@ -305,7 +306,7 @@
mScheduler->registerDisplay(display1);
mScheduler->registerDisplay(display2);
- const std::vector<sp<DisplayDevice>>& expectedDisplays = {display1, display2};
+ std::vector<sp<DisplayDevice>> expectedDisplays = {display1, display2};
std::vector<RefreshRateConfigs::LayerRequirement> layers = {{.weight = 1.f}, {.weight = 1.f}};
GlobalSignals globalSignals = {.idle = true};
std::vector<DisplayModeConfig> expectedConfigs = {DisplayModeConfig{globalSignals, kMode60_1},
@@ -350,6 +351,32 @@
<< displayModeConfigs.at(i).displayModePtr->getFps().getIntValue();
EXPECT_EQ(globalSignals, displayModeConfigs.at(i).signals);
}
+
+ // Filters out the 120Hz as it's not present on the display3, even with touch active
+ // we select 60Hz here.
+ auto display3 = mFakeDisplayInjector.injectDefaultInternalDisplay(
+ [&](FakeDisplayDeviceInjector& injector) {
+ injector.setDisplayModes(makeModes(kMode60_3), kMode60_3->getId());
+ },
+ mFlinger, /* port */ 252u);
+ mScheduler->registerDisplay(display3);
+
+ expectedDisplays = {display1, display2, display3};
+ globalSignals = {.touch = true};
+ mScheduler->replaceTouchTimer(10);
+ expectedConfigs = std::vector<DisplayModeConfig>{DisplayModeConfig{globalSignals, kMode60_1},
+ DisplayModeConfig{globalSignals, kMode60_2},
+ DisplayModeConfig{globalSignals, kMode60_3}};
+ mScheduler->setTouchStateAndIdleTimerPolicy(globalSignals);
+ displayModeConfigs = mScheduler->getBestDisplayModeConfigs();
+ ASSERT_EQ(expectedConfigs.size(), displayModeConfigs.size());
+ for (size_t i = 0; i < expectedConfigs.size(); ++i) {
+ EXPECT_EQ(expectedConfigs.at(i).displayModePtr, displayModeConfigs.at(i).displayModePtr)
+ << "Expected fps " << expectedConfigs.at(i).displayModePtr->getFps().getIntValue()
+ << " Actual fps "
+ << displayModeConfigs.at(i).displayModePtr->getFps().getIntValue();
+ EXPECT_EQ(globalSignals, displayModeConfigs.at(i).signals);
+ }
}
} // namespace android::scheduler