From 4262f949e38af248098ff20cad5d44fe08d594ba Mon Sep 17 00:00:00 2001 From: Xiang Wang Date: Tue, 2 Aug 2022 11:02:46 -0700 Subject: [PATCH] Check if it's game package before updating configs Rename "invalid config" to "inactive config and gate the warning behind DEBUG flag, as it's expected for games to opt in game modes Bug: b/240335717 Test: atest GameManagerServiceTests Change-Id: I0aae9bb4c68e01a8d4797fd6595535467f7d1fe6 --- .../server/app/GameManagerService.java | 30 ++++++++++++------- .../server/app/GameManagerServiceTests.java | 26 ++++++++-------- 2 files changed, 32 insertions(+), 24 deletions(-) diff --git a/services/core/java/com/android/server/app/GameManagerService.java b/services/core/java/com/android/server/app/GameManagerService.java index dd73cbed06d90..99ce925e0b6d6 100644 --- a/services/core/java/com/android/server/app/GameManagerService.java +++ b/services/core/java/com/android/server/app/GameManagerService.java @@ -333,7 +333,7 @@ public final class GameManagerService extends IGameManagerService.Stub { removeMessages(POPULATE_GAME_MODE_SETTINGS, msg.obj); final int userId = (int) msg.obj; final String[] packageNames = getInstalledGamePackageNames(userId); - updateConfigsForUser(userId, packageNames); + updateConfigsForUser(userId, false /*checkGamePackage*/, packageNames); break; } case SET_GAME_STATE: { @@ -402,7 +402,8 @@ public final class GameManagerService extends IGameManagerService.Stub { @Override public void onPropertiesChanged(Properties properties) { final String[] packageNames = properties.getKeyset().toArray(new String[0]); - updateConfigsForUser(ActivityManager.getCurrentUser(), packageNames); + updateConfigsForUser(ActivityManager.getCurrentUser(), true /*checkGamePackage*/, + packageNames); } @Override @@ -718,7 +719,7 @@ public final class GameManagerService extends IGameManagerService.Stub { mFps = fpsStr; } - public boolean isValid() { + public boolean isActive() { return (mGameMode == GameManager.GAME_MODE_STANDARD || mGameMode == GameManager.GAME_MODE_PERFORMANCE || mGameMode == GameManager.GAME_MODE_BATTERY) @@ -810,15 +811,15 @@ public final class GameManagerService extends IGameManagerService.Stub { * Insert a new GameModeConfiguration */ public void addModeConfig(GameModeConfiguration config) { - if (config.isValid()) { + if (config.isActive()) { mModeConfigs.put(config.getGameMode(), config); } else { - Slog.w(TAG, "Invalid game mode config for " + Slog.w(TAG, "Attempt to add inactive game mode config for " + mPackageName + ":" + config.toString()); } } - public boolean isValid() { + public boolean isActive() { return mModeConfigs.size() > 0 || mBatteryModeOptedIn || mPerfModeOptedIn; } @@ -1570,20 +1571,27 @@ public final class GameManagerService extends IGameManagerService.Stub { * @hide */ @VisibleForTesting - void updateConfigsForUser(@UserIdInt int userId, String... packageNames) { + void updateConfigsForUser(@UserIdInt int userId, boolean checkGamePackage, + String... packageNames) { + if (checkGamePackage) { + packageNames = Arrays.stream(packageNames).filter( + p -> isPackageGame(p, userId)).toArray(String[]::new); + } try { synchronized (mDeviceConfigLock) { for (final String packageName : packageNames) { final GamePackageConfiguration config = new GamePackageConfiguration(packageName, userId); - if (config.isValid()) { + if (config.isActive()) { if (DEBUG) { Slog.i(TAG, "Adding config: " + config.toString()); } mConfigs.put(packageName, config); } else { - Slog.w(TAG, "Invalid package config for " - + config.getPackageName() + ":" + config.toString()); + if (DEBUG) { + Slog.w(TAG, "Inactive package config for " + + config.getPackageName() + ":" + config.toString()); + } mConfigs.remove(packageName); } } @@ -1761,7 +1769,7 @@ public final class GameManagerService extends IGameManagerService.Stub { } switch (intent.getAction()) { case ACTION_PACKAGE_ADDED: - updateConfigsForUser(userId, packageName); + updateConfigsForUser(userId, true /*checkGamePackage*/, packageName); break; case ACTION_PACKAGE_REMOVED: disableCompatScale(packageName); 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 d675b0aa4973a..d325e47f76879 100644 --- a/services/tests/mockingservicestests/src/com/android/server/app/GameManagerServiceTests.java +++ b/services/tests/mockingservicestests/src/com/android/server/app/GameManagerServiceTests.java @@ -450,13 +450,13 @@ public class GameManagerServiceTests { startUser(gameManagerService, USER_ID_1); - gameManagerService.updateConfigsForUser(USER_ID_1, mPackageName); + gameManagerService.updateConfigsForUser(USER_ID_1, true, mPackageName); mockModifyGameModeGranted(); assertEquals(GameManager.GAME_MODE_UNSUPPORTED, gameManagerService.getGameMode(mPackageName, USER_ID_1)); // We need to make sure the mode is supported before setting it. mockDeviceConfigAll(); - gameManagerService.updateConfigsForUser(USER_ID_1, mPackageName); + gameManagerService.updateConfigsForUser(USER_ID_1, true, mPackageName); gameManagerService.setGameMode(mPackageName, GameManager.GAME_MODE_STANDARD, USER_ID_1); assertEquals(GameManager.GAME_MODE_STANDARD, gameManagerService.getGameMode(mPackageName, USER_ID_1)); @@ -534,8 +534,8 @@ public class GameManagerServiceTests { startUser(gameManagerService, USER_ID_1); startUser(gameManagerService, USER_ID_2); - gameManagerService.updateConfigsForUser(USER_ID_1, mPackageName); - gameManagerService.updateConfigsForUser(USER_ID_2, mPackageName); + gameManagerService.updateConfigsForUser(USER_ID_1, true, mPackageName); + gameManagerService.updateConfigsForUser(USER_ID_2, true, mPackageName); // Set User 1 to Standard gameManagerService.setGameMode(mPackageName, GameManager.GAME_MODE_STANDARD, USER_ID_1); @@ -563,7 +563,7 @@ public class GameManagerServiceTests { if (gameManagerService == null) { gameManagerService = new GameManagerService(mMockContext, mTestLooper.getLooper()); startUser(gameManagerService, USER_ID_1); - gameManagerService.updateConfigsForUser(USER_ID_1, mPackageName); + gameManagerService.updateConfigsForUser(USER_ID_1, true, mPackageName); } ArraySet reportedModes = new ArraySet<>(); int[] modes = gameManagerService.getAvailableGameModes(mPackageName); @@ -582,7 +582,7 @@ public class GameManagerServiceTests { if (gameManagerService == null) { gameManagerService = new GameManagerService(mMockContext, mTestLooper.getLooper()); startUser(gameManagerService, USER_ID_1); - gameManagerService.updateConfigsForUser(USER_ID_1, mPackageName); + gameManagerService.updateConfigsForUser(USER_ID_1, true, mPackageName); } GameManagerService.GamePackageConfiguration config = gameManagerService.getConfig(mPackageName); @@ -591,7 +591,7 @@ public class GameManagerServiceTests { private void checkAngleEnabled(GameManagerService gameManagerService, int gameMode, boolean angleEnabled) { - gameManagerService.updateConfigsForUser(USER_ID_1, mPackageName); + gameManagerService.updateConfigsForUser(USER_ID_1, true, mPackageName); // Validate GamePackageConfiguration returns the correct value. GameManagerService.GamePackageConfiguration config = @@ -604,7 +604,7 @@ public class GameManagerServiceTests { private void checkLoadingBoost(GameManagerService gameManagerService, int gameMode, int loadingBoost) { - gameManagerService.updateConfigsForUser(USER_ID_1, mPackageName); + gameManagerService.updateConfigsForUser(USER_ID_1, true, mPackageName); // Validate GamePackageConfiguration returns the correct value. GameManagerService.GamePackageConfiguration config = @@ -621,7 +621,7 @@ public class GameManagerServiceTests { if (gameManagerService == null) { gameManagerService = new GameManagerService(mMockContext, mTestLooper.getLooper()); startUser(gameManagerService, USER_ID_1); - gameManagerService.updateConfigsForUser(USER_ID_1, mPackageName); + gameManagerService.updateConfigsForUser(USER_ID_1, true, mPackageName); } GameManagerService.GamePackageConfiguration config = gameManagerService.getConfig(mPackageName); @@ -1091,7 +1091,7 @@ public class GameManagerServiceTests { GameManagerService gameManagerService = new GameManagerService(mMockContext, mTestLooper.getLooper()); startUser(gameManagerService, USER_ID_1); - gameManagerService.updateConfigsForUser(USER_ID_1, mPackageName); + gameManagerService.updateConfigsForUser(USER_ID_1, true, mPackageName); GameManagerService.GamePackageConfiguration config = gameManagerService.getConfig(mPackageName); assertNull(config.getGameModeConfiguration(GameManager.GAME_MODE_PERFORMANCE)); @@ -1109,7 +1109,7 @@ public class GameManagerServiceTests { new GameManagerService(mMockContext, mTestLooper.getLooper()); startUser(gameManagerService, USER_ID_1); gameManagerService.setGameMode(mPackageName, GameManager.GAME_MODE_PERFORMANCE, USER_ID_1); - gameManagerService.updateConfigsForUser(USER_ID_1, mPackageName); + gameManagerService.updateConfigsForUser(USER_ID_1, true, mPackageName); assertEquals(GameManager.GAME_MODE_UNSUPPORTED, gameManagerService.getGameMode(mPackageName, USER_ID_1)); } @@ -1126,7 +1126,7 @@ public class GameManagerServiceTests { new GameManagerService(mMockContext, mTestLooper.getLooper()); startUser(gameManagerService, USER_ID_1); gameManagerService.setGameMode(mPackageName, GameManager.GAME_MODE_BATTERY, USER_ID_1); - gameManagerService.updateConfigsForUser(USER_ID_1, mPackageName); + gameManagerService.updateConfigsForUser(USER_ID_1, true, mPackageName); assertEquals(GameManager.GAME_MODE_STANDARD, gameManagerService.getGameMode(mPackageName, USER_ID_1)); } @@ -1143,7 +1143,7 @@ public class GameManagerServiceTests { new GameManagerService(mMockContext, mTestLooper.getLooper()); startUser(gameManagerService, USER_ID_1); gameManagerService.setGameMode(mPackageName, GameManager.GAME_MODE_UNSUPPORTED, USER_ID_1); - gameManagerService.updateConfigsForUser(USER_ID_1, mPackageName); + gameManagerService.updateConfigsForUser(USER_ID_1, true, mPackageName); assertEquals(GameManager.GAME_MODE_STANDARD, gameManagerService.getGameMode(mPackageName, USER_ID_1)); }