Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit cca55377 authored by Xiang Wang's avatar Xiang Wang
Browse files

Apply interventions directly if the current game mode is CUSTOM

Bug: b/261090034
Test: atest GameManagerServiceTests
Change-Id: I12097eeaabcc7d5c80698cb781538670c38ae8b3
parent 1697a83b
Loading
Loading
Loading
Loading
+19 −13
Original line number Diff line number Diff line
@@ -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());
    }

    /**
+6 −2
Original line number Diff line number Diff line
@@ -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);