Implement game mode framerate override
Add logic for setting throttling framerate requested
by Game Dashboard interventions.
- Refactored of FrameRateOverrideMappings in Scheduler
- Have mSupportsFrameRateOverride only guard mFrameRateOverrideByContent
- Remove logic that disables framerate override when it's not a divider
Bug: b/204322816
Test: atest FrameRateOverrideHostTest
Change-Id: I1a2caf378cd87ce4830f6fc48332b5df518330cc
diff --git a/services/surfaceflinger/Scheduler/RefreshRateConfigs.cpp b/services/surfaceflinger/Scheduler/RefreshRateConfigs.cpp
index a94952f..eaec789 100644
--- a/services/surfaceflinger/Scheduler/RefreshRateConfigs.cpp
+++ b/services/surfaceflinger/Scheduler/RefreshRateConfigs.cpp
@@ -206,7 +206,7 @@
if (layer.vote == LayerVoteType::ExplicitExact) {
const int divider = getFrameRateDivider(refreshRate.getFps(), layer.desiredRefreshRate);
- if (mSupportsFrameRateOverride) {
+ if (mSupportsFrameRateOverrideByContent) {
// Since we support frame rate override, allow refresh rates which are
// multiples of the layer's request, as those apps would be throttled
// down to run at the desired refresh rate.
@@ -479,7 +479,7 @@
const RefreshRate& touchRefreshRate = getMaxRefreshRateByPolicyLocked(anchorGroup);
const bool touchBoostForExplicitExact = [&] {
- if (mSupportsFrameRateOverride) {
+ if (mSupportsFrameRateOverrideByContent) {
// Enable touch boost if there are other layers besides exact
return explicitExact + noVoteLayers != layers.size();
} else {
@@ -547,7 +547,6 @@
const std::vector<LayerRequirement>& layers, Fps displayFrameRate,
GlobalSignals globalSignals) const {
ATRACE_CALL();
- if (!mSupportsFrameRateOverride) return {};
ALOGV("getFrameRateOverrides %zu layers", layers.size());
std::lock_guard lock(mLock);
@@ -762,12 +761,12 @@
mMinSupportedRefreshRate = sortedModes.front();
mMaxSupportedRefreshRate = sortedModes.back();
- mSupportsFrameRateOverride = false;
+ mSupportsFrameRateOverrideByContent = false;
if (mConfig.enableFrameRateOverride) {
for (const auto& mode1 : sortedModes) {
for (const auto& mode2 : sortedModes) {
if (getFrameRateDivider(mode1->getFps(), mode2->getFps()) >= 2) {
- mSupportsFrameRateOverride = true;
+ mSupportsFrameRateOverrideByContent = true;
break;
}
}
@@ -1006,8 +1005,8 @@
base::StringAppendF(&result, "\t%s\n", refreshRate->toString().c_str());
}
- base::StringAppendF(&result, "Supports Frame Rate Override: %s\n",
- mSupportsFrameRateOverride ? "yes" : "no");
+ base::StringAppendF(&result, "Supports Frame Rate Override By Content: %s\n",
+ mSupportsFrameRateOverrideByContent ? "yes" : "no");
base::StringAppendF(&result, "Idle timer: (%s) %s\n",
mConfig.supportKernelIdleTimer ? "kernel" : "platform",
mIdleTimer ? mIdleTimer->dump().c_str() : "off");