SF: Remove DisplayModeSelectionParams
Extract makeGlobalSignals instead. Inline getRankedDisplayModes.
Bug: 241285191
Test: libsurfaceflinger_unittest
Change-Id: Ic48ac3ad1bd9df6820c9c9e5f6384b8d15b38809
diff --git a/services/surfaceflinger/Scheduler/Scheduler.cpp b/services/surfaceflinger/Scheduler/Scheduler.cpp
index 7f04a4d..8e71056 100644
--- a/services/surfaceflinger/Scheduler/Scheduler.cpp
+++ b/services/surfaceflinger/Scheduler/Scheduler.cpp
@@ -766,16 +766,14 @@
std::vector<RefreshRateRankingsAndSignals> refreshRateRankingsAndSignalsPerDisplay;
refreshRateRankingsAndSignalsPerDisplay.reserve(mDisplays.size());
- const auto displayModeSelectionParams = getDisplayModeSelectionParams();
+ for (const auto& [id, display] : mDisplays) {
+ const auto [rankings, signals] =
+ display->holdRefreshRateConfigs()
+ ->getRankedRefreshRates(mPolicy.contentRequirements, makeGlobalSignals());
- std::for_each(mDisplays.begin(), mDisplays.end(), [&](const auto& display) {
- const auto& [refreshRateRankings, globalSignals] =
- display.second->holdRefreshRateConfigs()
- ->getRankedRefreshRates(displayModeSelectionParams.layerRequirements,
- displayModeSelectionParams.globalSignals);
refreshRateRankingsAndSignalsPerDisplay.emplace_back(
- RefreshRateRankingsAndSignals{refreshRateRankings, globalSignals});
- });
+ RefreshRateRankingsAndSignals{rankings, signals});
+ }
// FPS and their Aggregated score.
std::unordered_map<Fps, AggregatedFpsScore, FpsHash, FpsApproxEqual> aggregatedScoresPerFps =
@@ -812,34 +810,26 @@
return displayModeConfigs;
}
-DisplayModeSelectionParams Scheduler::getDisplayModeSelectionParams() const {
+GlobalSignals Scheduler::makeGlobalSignals() const {
const bool powerOnImminent = mDisplayPowerTimer &&
(mPolicy.displayPowerMode != hal::PowerMode::ON ||
mPolicy.displayPowerTimer == TimerState::Reset);
- const GlobalSignals signals{.touch = mTouchTimer && mPolicy.touch == TouchState::Active,
- .idle = mPolicy.idleTimer == TimerState::Expired,
- .powerOnImminent = powerOnImminent};
-
- return {mPolicy.contentRequirements, signals};
-}
-
-auto Scheduler::getRankedDisplayModes()
- -> std::pair<std::vector<RefreshRateRanking>, GlobalSignals> {
- ATRACE_CALL();
-
- const auto configs = holdRefreshRateConfigs();
-
- const auto displayModeSelectionParams = getDisplayModeSelectionParams();
- return configs->getRankedRefreshRates(displayModeSelectionParams.layerRequirements,
- displayModeSelectionParams.globalSignals);
+ return {.touch = mTouchTimer && mPolicy.touch == TouchState::Active,
+ .idle = mPolicy.idleTimer == TimerState::Expired,
+ .powerOnImminent = powerOnImminent};
}
DisplayModePtr Scheduler::getPreferredDisplayMode() {
std::lock_guard<std::mutex> lock(mPolicyLock);
// Make sure the stored mode is up to date.
if (mPolicy.mode) {
- mPolicy.mode = getRankedDisplayModes().first.front().displayModePtr;
+ const auto configs = holdRefreshRateConfigs();
+ const auto rankings =
+ configs->getRankedRefreshRates(mPolicy.contentRequirements, makeGlobalSignals())
+ .first;
+
+ mPolicy.mode = rankings.front().displayModePtr;
}
return mPolicy.mode;
}
diff --git a/services/surfaceflinger/Scheduler/Scheduler.h b/services/surfaceflinger/Scheduler/Scheduler.h
index d6f62ca..f104e45 100644
--- a/services/surfaceflinger/Scheduler/Scheduler.h
+++ b/services/surfaceflinger/Scheduler/Scheduler.h
@@ -116,12 +116,6 @@
size_t numDisplays;
};
-// Represents LayerRequirements and GlobalSignals to be considered for the display mode selection.
-struct DisplayModeSelectionParams {
- std::vector<RefreshRateConfigs::LayerRequirement> layerRequirements;
- GlobalSignals globalSignals;
-};
-
// Represents the RefreshRateRankings and GlobalSignals for the selected RefreshRateRankings.
struct RefreshRateRankingsAndSignals {
std::vector<RefreshRateRanking> refreshRateRankings;
@@ -303,11 +297,6 @@
template <typename S, typename T>
GlobalSignals applyPolicy(S Policy::*, T&&) EXCLUDES(mPolicyLock);
- // Returns the list of display modes in descending order of their priority that fulfills the
- // policy, and the signals that were considered.
- std::pair<std::vector<RefreshRateRanking>, GlobalSignals> getRankedDisplayModes()
- REQUIRES(mPolicyLock);
-
// Returns the best display mode per display.
std::vector<DisplayModeConfig> getBestDisplayModeConfigs() const REQUIRES(mPolicyLock);
@@ -315,9 +304,7 @@
std::vector<DisplayModeConfig> getDisplayModeConfigsForTheChosenFps(
Fps chosenFps, const std::vector<RefreshRateRankingsAndSignals>&) const;
- // Returns the DisplayModeSelectionParams to be considered for the
- // DisplayMode selection based on the current Policy and GlobalSignals.
- DisplayModeSelectionParams getDisplayModeSelectionParams() const REQUIRES(mPolicyLock);
+ GlobalSignals makeGlobalSignals() const REQUIRES(mPolicyLock);
bool updateFrameRateOverrides(GlobalSignals, Fps displayRefreshRate) REQUIRES(mPolicyLock);