summaryrefslogtreecommitdiff
path: root/services/surfaceflinger/SurfaceFlinger.cpp
diff options
context:
space:
mode:
author Andy Yu <chingtangyu@google.com> 2021-11-18 14:51:06 -0800
committer Andy Yu <chingtangyu@google.com> 2022-01-18 17:46:59 -0800
commit2ae6b6bc57089a726edf6ef7cc8582ec524c736f (patch)
tree7d18c1287dbfb46fc6cb71ac085c77c1fab62783 /services/surfaceflinger/SurfaceFlinger.cpp
parent338ee42d6eb20132ba98cb4dadeb6ff08bcd0b7a (diff)
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
Diffstat (limited to 'services/surfaceflinger/SurfaceFlinger.cpp')
-rw-r--r--services/surfaceflinger/SurfaceFlinger.cpp12
1 files changed, 12 insertions, 0 deletions
diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp
index 51cb409235..0bb0aa8b7e 100644
--- a/services/surfaceflinger/SurfaceFlinger.cpp
+++ b/services/surfaceflinger/SurfaceFlinger.cpp
@@ -5566,6 +5566,7 @@ status_t SurfaceFlinger::CheckTransactCodeCredentials(uint32_t code) {
}
return PERMISSION_DENIED;
}
+ case SET_OVERRIDE_FRAME_RATE:
case ON_PULL_ATOM: {
const int uid = IPCThreadState::self()->getCallingUid();
if (uid == AID_SYSTEM) {
@@ -6970,6 +6971,17 @@ status_t SurfaceFlinger::setFrameRate(const sp<IGraphicBufferProducer>& surface,
return NO_ERROR;
}
+status_t SurfaceFlinger::setOverrideFrameRate(uid_t uid, float frameRate) {
+ PhysicalDisplayId displayId = [&]() {
+ Mutex::Autolock lock(mStateLock);
+ return getDefaultDisplayDeviceLocked()->getPhysicalId();
+ }();
+
+ mScheduler->setGameModeRefreshRateForUid(FrameRateOverride{static_cast<uid_t>(uid), frameRate});
+ mScheduler->onFrameRateOverridesChanged(mAppConnectionHandle, displayId);
+ return NO_ERROR;
+}
+
status_t SurfaceFlinger::setFrameTimelineInfo(const sp<IGraphicBufferProducer>& surface,
const FrameTimelineInfo& frameTimelineInfo) {
Mutex::Autolock lock(mStateLock);