diff options
| author | 2022-11-18 16:24:31 -0800 | |
|---|---|---|
| committer | 2022-11-30 05:00:39 +0000 | |
| commit | 439c2830a4b506770e1736bb65104028e49a1ca3 (patch) | |
| tree | 8f6671a67fbc2816b231a5ab4a113298d1c7f230 | |
| parent | 1691b994bc0a60a9da6be12e415ba23a61372173 (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.java | 11 | ||||
| -rw-r--r-- | services/tests/mockingservicestests/src/com/android/server/app/GameManagerServiceTests.java | 66 |
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 { |