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
This commit is contained in:
Tim Van Patten
2021-12-06 18:00:49 -07:00
parent 9517237010
commit ef7aedfce6
2 changed files with 7 additions and 7 deletions

View File

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

View File

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