From c40c497fba490105f36267ee67db75dc2ebc6ac2 Mon Sep 17 00:00:00 2001 From: jimblackler Date: Wed, 13 Apr 2022 22:15:30 +0000 Subject: [PATCH] Loading boost: use the existing GAME_LOADING power mode, and deactivate it on a timer. Test: Manual Bug: 207845905 Change-Id: Iee3a43704e39b24c61dec6d7a655caa5493386fe --- .../server/app/GameManagerService.java | 24 +++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/services/core/java/com/android/server/app/GameManagerService.java b/services/core/java/com/android/server/app/GameManagerService.java index 1c1d72685cf45..3a789741842fd 100644 --- a/services/core/java/com/android/server/app/GameManagerService.java +++ b/services/core/java/com/android/server/app/GameManagerService.java @@ -121,7 +121,10 @@ public final class GameManagerService extends IGameManagerService.Stub { static final int REMOVE_SETTINGS = 2; static final int POPULATE_GAME_MODE_SETTINGS = 3; static final int SET_GAME_STATE = 4; + static final int CANCEL_GAME_LOADING_MODE = 5; static final int WRITE_SETTINGS_DELAY = 10 * 1000; // 10 seconds + static final int LOADING_BOOST_MAX_DURATION = 5 * 1000; // 5 seconds + static final PackageOverride COMPAT_ENABLED = new PackageOverride.Builder().setEnabled(true) .build(); static final PackageOverride COMPAT_DISABLED = new PackageOverride.Builder().setEnabled(false) @@ -299,6 +302,10 @@ public final class GameManagerService extends IGameManagerService.Stub { } break; } + case CANCEL_GAME_LOADING_MODE: { + mPowerManagerInternal.setPowerMode(Mode.GAME_LOADING, false); + break; + } } } } @@ -1028,9 +1035,22 @@ public final class GameManagerService extends IGameManagerService.Stub { if (gameMode == GameManager.GAME_MODE_UNSUPPORTED) { return; } - final int loadingBoostDuration = getLoadingBoostDuration(packageName, userId); + int loadingBoostDuration = getLoadingBoostDuration(packageName, userId); if (loadingBoostDuration != -1) { - mPowerManagerInternal.setPowerBoost(Mode.GAME_LOADING, loadingBoostDuration); + if (loadingBoostDuration == 0 || loadingBoostDuration > LOADING_BOOST_MAX_DURATION) { + loadingBoostDuration = LOADING_BOOST_MAX_DURATION; + } + if (mHandler.hasMessages(CANCEL_GAME_LOADING_MODE)) { + // The loading mode has already been set and is waiting to be unset. It is not + // required to set the mode again and we should replace the queued cancel + // instruction. + mHandler.removeMessages(CANCEL_GAME_LOADING_MODE); + } else { + mPowerManagerInternal.setPowerMode(Mode.GAME_LOADING, true); + } + + mHandler.sendMessageDelayed( + mHandler.obtainMessage(CANCEL_GAME_LOADING_MODE), loadingBoostDuration); } }