From ef7aedfce6886ad6e31ede589878bf7b6e190b4d Mon Sep 17 00:00:00 2001 From: Tim Van Patten Date: Mon, 6 Dec 2021 18:00:49 -0700 Subject: [PATCH] ANGLE: Global.Settings should override GameManagerService If ANGLE is enabled by the Game Dashboard (GameManagerService), but the user has specified the native driver should be loaded, GraphicsEnvironment::shouldUseAngle() will still return 'true' and ANGLE will be loaded. This CL updates GraphicsEnvironment::shouldUseAngle() to not return true if the user has forced the native driver. This CL also updates GameManagerService to allow config values that only specify 'useAngle', rather than requiring 'downscaleFactor' also. Tested with the following adb commands: 1.) Enable ANGLE via DeviceConfig for Angry Birds 2: adb shell device_config put game_overlay com.rovio.baba mode=3,downscaleFactor=0.7,useAngle=true 2.) Force the native driver: adb shell settings put global angle_gl_driver_selection_pkgs com.rovio.baba adb shell settings put global angle_gl_driver_selection_values native Test: adb commands Test: atest CtsAngleIntegrationHostTestCases Bug: b/209519090 Change-Id: Ic1fb867129e0707a38470250d333fcbf486cab76 --- core/java/android/os/GraphicsEnvironment.java | 7 ++++--- .../java/com/android/server/app/GameManagerService.java | 7 +++---- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/core/java/android/os/GraphicsEnvironment.java b/core/java/android/os/GraphicsEnvironment.java index 8292f26a8c6b8..aa4b83a5c3616 100644 --- a/core/java/android/os/GraphicsEnvironment.java +++ b/core/java/android/os/GraphicsEnvironment.java @@ -192,14 +192,15 @@ public class GraphicsEnvironment { // We only want to use ANGLE if the developer has explicitly chosen something other than // default driver. - final boolean requested = devOptIn.equals(ANGLE_GL_DRIVER_CHOICE_ANGLE); - if (requested) { + final boolean forceAngle = devOptIn.equals(ANGLE_GL_DRIVER_CHOICE_ANGLE); + final boolean forceNative = devOptIn.equals(ANGLE_GL_DRIVER_CHOICE_NATIVE); + if (forceAngle || forceNative) { Log.v(TAG, "ANGLE developer option for " + packageName + ": " + devOptIn); } final boolean gameModeEnabledAngle = isAngleEnabledByGameMode(context, packageName); - return requested || gameModeEnabledAngle; + return !forceNative && (forceAngle || gameModeEnabledAngle); } private int getVulkanVersion(PackageManager pm) { diff --git a/services/core/java/com/android/server/app/GameManagerService.java b/services/core/java/com/android/server/app/GameManagerService.java index 20606f0e9f4d1..8dce8e9e90ef3 100644 --- a/services/core/java/com/android/server/app/GameManagerService.java +++ b/services/core/java/com/android/server/app/GameManagerService.java @@ -385,9 +385,8 @@ public final class GameManagerService extends IGameManagerService.Stub { } public boolean isValid() { - return (mGameMode == GameManager.GAME_MODE_PERFORMANCE - || mGameMode == GameManager.GAME_MODE_BATTERY) - && (!mAllowDownscale || getCompatChangeId() != 0); + return mGameMode == GameManager.GAME_MODE_PERFORMANCE + || mGameMode == GameManager.GAME_MODE_BATTERY; } /** @@ -839,7 +838,7 @@ public final class GameManagerService extends IGameManagerService.Stub { } long scaleId = modeConfig.getCompatChangeId(); if (scaleId == 0) { - Slog.w(TAG, "Invalid downscaling change id " + scaleId + " for " + Slog.i(TAG, "Invalid downscaling change id " + scaleId + " for " + packageName); return; }