summaryrefslogtreecommitdiff
path: root/libs/gui/ISurfaceComposer.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 /libs/gui/ISurfaceComposer.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 'libs/gui/ISurfaceComposer.cpp')
-rw-r--r--libs/gui/ISurfaceComposer.cpp26
1 files changed, 26 insertions, 0 deletions
diff --git a/libs/gui/ISurfaceComposer.cpp b/libs/gui/ISurfaceComposer.cpp
index 02270433b6..b7594df2fb 100644
--- a/libs/gui/ISurfaceComposer.cpp
+++ b/libs/gui/ISurfaceComposer.cpp
@@ -1346,6 +1346,21 @@ public:
SAFE_PARCEL(data.writeStrongBinder, IInterface::asBinder(windowInfosListener));
return remote()->transact(BnSurfaceComposer::REMOVE_WINDOW_INFOS_LISTENER, data, &reply);
}
+
+ status_t setOverrideFrameRate(uid_t uid, float frameRate) override {
+ Parcel data, reply;
+ SAFE_PARCEL(data.writeInterfaceToken, ISurfaceComposer::getInterfaceDescriptor());
+ SAFE_PARCEL(data.writeUint32, uid);
+ SAFE_PARCEL(data.writeFloat, frameRate);
+
+ status_t err = remote()->transact(BnSurfaceComposer::SET_OVERRIDE_FRAME_RATE, data, &reply);
+ if (err != NO_ERROR) {
+ ALOGE("setOverrideFrameRate: failed to transact %s (%d)", strerror(-err), err);
+ return err;
+ }
+
+ return NO_ERROR;
+ }
};
// Out-of-line virtual method definition to trigger vtable emission in this
@@ -2306,6 +2321,17 @@ status_t BnSurfaceComposer::onTransact(
return removeWindowInfosListener(listener);
}
+ case SET_OVERRIDE_FRAME_RATE: {
+ CHECK_INTERFACE(ISurfaceComposer, data, reply);
+
+ uid_t uid;
+ SAFE_PARCEL(data.readUint32, &uid);
+
+ float frameRate;
+ SAFE_PARCEL(data.readFloat, &frameRate);
+
+ return setOverrideFrameRate(uid, frameRate);
+ }
default: {
return BBinder::onTransact(code, data, reply, flags);
}