[MD] Return list of scored refresh rates based on overallscore.
The sorted list returns the refresh rates in the
descending order of priority and their
overallscore.
This overall score will be used and called for multiple displays
and will be used to make the final selection in the
DisplayModeController for all the displays.
BUG: 240743471
Test: atest libsurfaceflinger_unittest
Change-Id: I8355425e89452f5ce73858a6173c53be9f3753ef
diff --git a/services/surfaceflinger/Scheduler/Scheduler.cpp b/services/surfaceflinger/Scheduler/Scheduler.cpp
index ff6b461..6d68bac 100644
--- a/services/surfaceflinger/Scheduler/Scheduler.cpp
+++ b/services/surfaceflinger/Scheduler/Scheduler.cpp
@@ -674,7 +674,9 @@
if (currentState == newState) return {};
currentState = std::forward<T>(newState);
- std::tie(newMode, consideredSignals) = chooseDisplayMode();
+ const auto [rankings, signals] = getRankedDisplayModes();
+ newMode = rankings.front().displayModePtr;
+ consideredSignals = signals;
frameRateOverridesChanged = updateFrameRateOverrides(consideredSignals, newMode->getFps());
if (mPolicy.mode == newMode) {
@@ -699,7 +701,8 @@
return consideredSignals;
}
-auto Scheduler::chooseDisplayMode() -> std::pair<DisplayModePtr, GlobalSignals> {
+auto Scheduler::getRankedDisplayModes()
+ -> std::pair<std::vector<RefreshRateRanking>, GlobalSignals> {
ATRACE_CALL();
const auto configs = holdRefreshRateConfigs();
@@ -712,14 +715,14 @@
.idle = mPolicy.idleTimer == TimerState::Expired,
.powerOnImminent = powerOnImminent};
- return configs->getBestRefreshRate(mPolicy.contentRequirements, signals);
+ return configs->getRankedRefreshRates(mPolicy.contentRequirements, signals);
}
DisplayModePtr Scheduler::getPreferredDisplayMode() {
std::lock_guard<std::mutex> lock(mPolicyLock);
// Make sure the stored mode is up to date.
if (mPolicy.mode) {
- mPolicy.mode = chooseDisplayMode().first;
+ mPolicy.mode = getRankedDisplayModes().first.front().displayModePtr;
}
return mPolicy.mode;
}