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/Scheduler/Scheduler.cpp b/services/surfaceflinger/Scheduler/Scheduler.cpp
index 7f04a4d..0a26b91 100644
--- a/services/surfaceflinger/Scheduler/Scheduler.cpp
+++ b/services/surfaceflinger/Scheduler/Scheduler.cpp
@@ -781,13 +781,17 @@
std::unordered_map<Fps, AggregatedFpsScore, FpsHash, FpsApproxEqual> aggregatedScoresPerFps =
getAggregatedScoresPerFps(refreshRateRankingsAndSignalsPerDisplay);
- Fps chosenFps = std::max_element(aggregatedScoresPerFps.begin(), aggregatedScoresPerFps.end(),
- [](const auto& max, const auto& current) {
- return max.second.totalScore <= current.second.totalScore;
- })
- ->first;
-
- return getDisplayModeConfigsForTheChosenFps(chosenFps, refreshRateRankingsAndSignalsPerDisplay);
+ auto maxScoreIt = aggregatedScoresPerFps.cbegin();
+ // Selects the max Fps that is present on all the displays.
+ for (auto it = aggregatedScoresPerFps.cbegin(); it != aggregatedScoresPerFps.cend(); ++it) {
+ const auto [fps, aggregatedScore] = *it;
+ if (aggregatedScore.numDisplays == mDisplays.size() &&
+ aggregatedScore.totalScore >= maxScoreIt->second.totalScore) {
+ maxScoreIt = it;
+ }
+ }
+ return getDisplayModeConfigsForTheChosenFps(maxScoreIt->first,
+ refreshRateRankingsAndSignalsPerDisplay);
}
std::vector<DisplayModeConfig> Scheduler::getDisplayModeConfigsForTheChosenFps(