Apply interventions directly if the current game mode is CUSTOM

Bug: b/261090034
Test: atest GameManagerServiceTests
Change-Id: I12097eeaabcc7d5c80698cb781538670c38ae8b3
This commit is contained in:
Xiang Wang
2022-12-20 11:17:05 -08:00
parent 1697a83bf6
commit cca55377e3
2 changed files with 25 additions and 15 deletions

View File

@@ -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());
}
/**

View File

@@ -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);