diff options
author | 2021-11-18 14:51:06 -0800 | |
---|---|---|
committer | 2022-01-18 17:46:59 -0800 | |
commit | 2ae6b6bc57089a726edf6ef7cc8582ec524c736f (patch) | |
tree | 7d18c1287dbfb46fc6cb71ac085c77c1fab62783 /libs/gui/ISurfaceComposer.cpp | |
parent | 338ee42d6eb20132ba98cb4dadeb6ff08bcd0b7a (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.cpp | 26 |
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); } |