diff --git a/services/core/java/com/android/server/app/GameManagerService.java b/services/core/java/com/android/server/app/GameManagerService.java index 46d3ff1273ec5..44dbc9fbdf644 100644 --- a/services/core/java/com/android/server/app/GameManagerService.java +++ b/services/core/java/com/android/server/app/GameManagerService.java @@ -1388,10 +1388,26 @@ public final class GameManagerService extends IGameManagerService.Stub { configOverride = new GamePackageConfiguration(packageName); settings.setConfigOverride(packageName, configOverride); } - } GamePackageConfiguration.GameModeConfiguration internalConfig = configOverride.getOrAddDefaultGameModeConfiguration(GameManager.GAME_MODE_CUSTOM); + final float scalingValueFrom = internalConfig.getScaling(); + final int fpsValueFrom = internalConfig.getFps(); + internalConfig.updateFromPublicGameModeConfig(gameModeConfig); + + sendUserMessage(userId, WRITE_SETTINGS, EVENT_UPDATE_CUSTOM_GAME_MODE_CONFIG, + WRITE_DELAY_MILLIS); + sendUserMessage(userId, WRITE_GAME_MODE_INTERVENTION_LIST_FILE, + EVENT_UPDATE_CUSTOM_GAME_MODE_CONFIG, WRITE_DELAY_MILLIS /*delayMillis*/); + + final int gameMode = getGameMode(packageName, userId); + if (gameMode == GameManager.GAME_MODE_CUSTOM) { + updateInterventions(packageName, gameMode, userId); + } + Slog.i(TAG, "Updated custom game mode config for package: " + packageName + + " with FPS=" + internalConfig.getFps() + ";Scaling=" + + internalConfig.getScaling() + " under user " + userId); + int gameUid = -1; try { gameUid = mPackageManager.getPackageUidAsUser(packageName, userId); @@ -1400,18 +1416,8 @@ public final class GameManagerService extends IGameManagerService.Stub { } FrameworkStatsLog.write(FrameworkStatsLog.GAME_MODE_CONFIGURATION_CHANGED, gameUid, Binder.getCallingUid(), gameModeToStatsdGameMode(GameManager.GAME_MODE_CUSTOM), - internalConfig.getScaling(), gameModeConfig.getScalingFactor(), - internalConfig.getFps(), gameModeConfig.getFpsOverride()); - internalConfig.updateFromPublicGameModeConfig(gameModeConfig); - - Slog.i(TAG, "Updated custom game mode config for package: " + packageName - + " with FPS=" + internalConfig.getFps() + ";Scaling=" - + internalConfig.getScaling() + " under user " + userId); - - sendUserMessage(userId, WRITE_SETTINGS, EVENT_UPDATE_CUSTOM_GAME_MODE_CONFIG, - WRITE_DELAY_MILLIS); - sendUserMessage(userId, WRITE_GAME_MODE_INTERVENTION_LIST_FILE, - EVENT_UPDATE_CUSTOM_GAME_MODE_CONFIG, WRITE_DELAY_MILLIS /*delayMillis*/); + scalingValueFrom, gameModeConfig.getScalingFactor(), + fpsValueFrom, gameModeConfig.getFpsOverride()); } /** 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 d3fa92ce68d71..851ab74ec7a35 100644 --- a/services/tests/mockingservicestests/src/com/android/server/app/GameManagerServiceTests.java +++ b/services/tests/mockingservicestests/src/com/android/server/app/GameManagerServiceTests.java @@ -1874,16 +1874,20 @@ public class GameManagerServiceTests { @Test public void testUpdateCustomGameModeConfiguration() throws InterruptedException { mockModifyGameModeGranted(); - GameManagerService gameManagerService = createServiceAndStartUser(USER_ID_1); + GameManagerService gameManagerService = Mockito.spy(createServiceAndStartUser(USER_ID_1)); + gameManagerService.setGameMode(mPackageName, GameManager.GAME_MODE_CUSTOM, USER_ID_1); gameManagerService.updateCustomGameModeConfiguration(mPackageName, new GameModeConfiguration.Builder().setScalingFactor(0.35f).setFpsOverride( 60).build(), USER_ID_1); - assertTrue(gameManagerService.mHandler.hasEqualMessages(WRITE_SETTINGS, USER_ID_1)); assertTrue( gameManagerService.mHandler.hasEqualMessages(WRITE_GAME_MODE_INTERVENTION_LIST_FILE, USER_ID_1)); + Mockito.verify(gameManagerService).setOverrideFrameRate( + ArgumentMatchers.eq(DEFAULT_PACKAGE_UID), + ArgumentMatchers.eq(60.0f)); + checkFps(gameManagerService, GameManager.GAME_MODE_CUSTOM, 60); GameManagerService.GamePackageConfiguration pkgConfig = gameManagerService.getConfig( mPackageName, USER_ID_1);