summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Xiang Wang <xwxw@google.com> 2022-11-18 16:24:31 -0800
committer Xiang Wang <xwxw@google.com> 2022-11-30 05:00:39 +0000
commit439c2830a4b506770e1736bb65104028e49a1ca3 (patch)
tree8f6671a67fbc2816b231a5ab4a113298d1c7f230
parent1691b994bc0a60a9da6be12e415ba23a61372173 (diff)
Add timeout to loading boost on game state change
Bug: b/253455150 Test: atest GameManagerServiceTests Change-Id: I5557bc3c7e9df34a5f4c759bf4a456410915ac9f
-rw-r--r--services/core/java/com/android/server/app/GameManagerService.java11
-rw-r--r--services/tests/mockingservicestests/src/com/android/server/app/GameManagerServiceTests.java66
2 files changed, 66 insertions, 11 deletions
diff --git a/services/core/java/com/android/server/app/GameManagerService.java b/services/core/java/com/android/server/app/GameManagerService.java
index b92c1635d7c6..a954164fb79f 100644
--- a/services/core/java/com/android/server/app/GameManagerService.java
+++ b/services/core/java/com/android/server/app/GameManagerService.java
@@ -338,7 +338,18 @@ public final class GameManagerService extends IGameManagerService.Stub {
+ " and userId " + userId);
break;
}
+ if (mHandler.hasMessages(CANCEL_GAME_LOADING_MODE)) {
+ mHandler.removeMessages(CANCEL_GAME_LOADING_MODE);
+ }
mPowerManagerInternal.setPowerMode(Mode.GAME_LOADING, isLoading);
+ if (isLoading) {
+ int loadingBoostDuration = getLoadingBoostDuration(packageName, userId);
+ loadingBoostDuration = loadingBoostDuration > 0 ? loadingBoostDuration
+ : LOADING_BOOST_MAX_DURATION;
+ mHandler.sendMessageDelayed(
+ mHandler.obtainMessage(CANCEL_GAME_LOADING_MODE),
+ loadingBoostDuration);
+ }
}
break;
}
diff --git a/services/tests/mockingservicestests/src/com/android/server/app/GameManagerServiceTests.java b/services/tests/mockingservicestests/src/com/android/server/app/GameManagerServiceTests.java
index dc77762795c7..8d2e1ecf0802 100644
--- a/services/tests/mockingservicestests/src/com/android/server/app/GameManagerServiceTests.java
+++ b/services/tests/mockingservicestests/src/com/android/server/app/GameManagerServiceTests.java
@@ -17,6 +17,7 @@
package com.android.server.app;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.mockitoSession;
+import static com.android.server.app.GameManagerService.CANCEL_GAME_LOADING_MODE;
import static com.android.server.app.GameManagerService.WRITE_SETTINGS;
import static org.junit.Assert.assertArrayEquals;
@@ -1454,35 +1455,78 @@ public class GameManagerServiceTests {
verify(mMockPowerManager, never()).setPowerMode(anyInt(), anyBoolean());
}
- private void setGameState(boolean isLoading) {
+ @Test
+ public void testSetGameStateLoading_withNoDeviceConfig() {
mockDeviceConfigNone();
mockModifyGameModeGranted();
- GameManagerService gameManagerService =
- new GameManagerService(mMockContext, mTestLooper.getLooper());
- startUser(gameManagerService, USER_ID_1);
+ GameManagerService gameManagerService = createServiceAndStartUser(USER_ID_1);
gameManagerService.setGameMode(
mPackageName, GameManager.GAME_MODE_PERFORMANCE, USER_ID_1);
- int testMode = GameState.MODE_NONE;
+ assertEquals(gameManagerService.getGameMode(mPackageName, USER_ID_1),
+ GameManager.GAME_MODE_PERFORMANCE);
+ int testMode = GameState.MODE_GAMEPLAY_INTERRUPTIBLE;
int testLabel = 99;
int testQuality = 123;
- GameState gameState = new GameState(isLoading, testMode, testLabel, testQuality);
- assertEquals(isLoading, gameState.isLoading());
+ GameState gameState = new GameState(true, testMode, testLabel, testQuality);
assertEquals(testMode, gameState.getMode());
assertEquals(testLabel, gameState.getLabel());
assertEquals(testQuality, gameState.getQuality());
gameManagerService.setGameState(mPackageName, gameState, USER_ID_1);
mTestLooper.dispatchAll();
- verify(mMockPowerManager, times(1)).setPowerMode(Mode.GAME_LOADING, isLoading);
+ verify(mMockPowerManager, times(1)).setPowerMode(Mode.GAME_LOADING, true);
+ reset(mMockPowerManager);
+ assertTrue(
+ gameManagerService.mHandler.hasMessages(CANCEL_GAME_LOADING_MODE));
+ verify(mMockPowerManager, never()).setPowerMode(Mode.GAME_LOADING, false);
+ mTestLooper.moveTimeForward(GameManagerService.LOADING_BOOST_MAX_DURATION);
+ mTestLooper.dispatchAll();
+ verify(mMockPowerManager, times(1)).setPowerMode(Mode.GAME_LOADING, false);
}
@Test
- public void testSetGameStateLoading() {
- setGameState(true);
+ public void testSetGameStateLoading_withDeviceConfig() {
+ String configString = "mode=2,loadingBoost=2000";
+ when(DeviceConfig.getProperty(anyString(), anyString()))
+ .thenReturn(configString);
+ mockModifyGameModeGranted();
+ GameManagerService gameManagerService = createServiceAndStartUser(USER_ID_1);
+ gameManagerService.setGameMode(
+ mPackageName, GameManager.GAME_MODE_PERFORMANCE, USER_ID_1);
+ GameState gameState = new GameState(true, GameState.MODE_GAMEPLAY_INTERRUPTIBLE, 99, 123);
+ gameManagerService.setGameState(mPackageName, gameState, USER_ID_1);
+ mTestLooper.dispatchAll();
+ verify(mMockPowerManager, times(1)).setPowerMode(Mode.GAME_LOADING, true);
+ verify(mMockPowerManager, never()).setPowerMode(Mode.GAME_LOADING, false);
+ reset(mMockPowerManager);
+ assertTrue(
+ gameManagerService.mHandler.hasMessages(CANCEL_GAME_LOADING_MODE));
+ mTestLooper.moveTimeForward(2000);
+ mTestLooper.dispatchAll();
+ verify(mMockPowerManager, times(1)).setPowerMode(Mode.GAME_LOADING, false);
}
@Test
public void testSetGameStateNotLoading() {
- setGameState(false);
+ mockDeviceConfigNone();
+ mockModifyGameModeGranted();
+ GameManagerService gameManagerService =
+ new GameManagerService(mMockContext, mTestLooper.getLooper());
+ startUser(gameManagerService, USER_ID_1);
+ gameManagerService.setGameMode(
+ mPackageName, GameManager.GAME_MODE_PERFORMANCE, USER_ID_1);
+ int testMode = GameState.MODE_GAMEPLAY_UNINTERRUPTIBLE;
+ int testLabel = 99;
+ int testQuality = 123;
+ GameState gameState = new GameState(false, testMode, testLabel, testQuality);
+ assertFalse(gameState.isLoading());
+ assertEquals(testMode, gameState.getMode());
+ assertEquals(testLabel, gameState.getLabel());
+ assertEquals(testQuality, gameState.getQuality());
+ gameManagerService.setGameState(mPackageName, gameState, USER_ID_1);
+ mTestLooper.dispatchAll();
+ verify(mMockPowerManager, times(1)).setPowerMode(Mode.GAME_LOADING, false);
+ assertFalse(
+ gameManagerService.mHandler.hasMessages(CANCEL_GAME_LOADING_MODE));
}
private List<String> readGameModeInterventionList() throws Exception {