Loading core/java/android/os/GraphicsEnvironment.java +55 −48 Original line number Diff line number Diff line Loading @@ -64,10 +64,11 @@ public class GraphicsEnvironment { private static final String SYSTEM_DRIVER_NAME = "system"; private static final String SYSTEM_DRIVER_VERSION_NAME = ""; private static final long SYSTEM_DRIVER_VERSION_CODE = 0; private static final String PROPERTY_GFX_DRIVER = "ro.gfx.driver.0"; private static final String PROPERTY_GFX_DRIVER_PRODUCTION = "ro.gfx.driver.0"; private static final String PROPERTY_GFX_DRIVER_PRERELEASE = "ro.gfx.driver.1"; private static final String PROPERTY_GFX_DRIVER_BUILD_TIME = "ro.gfx.driver_build_time"; private static final String METADATA_DRIVER_BUILD_TIME = "com.android.gamedriver.build_time"; private static final String METADATA_DRIVER_BUILD_TIME = "com.android.graphics.updatabledriver.build_time"; private static final String METADATA_DEVELOPER_DRIVER_ENABLE = "com.android.graphics.developerdriver.enable"; private static final String METADATA_INJECT_LAYERS_ENABLE = Loading @@ -78,20 +79,20 @@ public class GraphicsEnvironment { private static final String ACTION_ANGLE_FOR_ANDROID_TOAST_MESSAGE = "android.app.action.ANGLE_FOR_ANDROID_TOAST_MESSAGE"; private static final String INTENT_KEY_A4A_TOAST_MESSAGE = "A4A Toast Message"; private static final String GAME_DRIVER_ALLOWLIST_ALL = "*"; private static final String GAME_DRIVER_SPHAL_LIBRARIES_FILENAME = "sphal_libraries.txt"; private static final String UPDATABLE_DRIVER_ALLOWLIST_ALL = "*"; private static final String UPDATABLE_DRIVER_SPHAL_LIBRARIES_FILENAME = "sphal_libraries.txt"; private static final int VULKAN_1_0 = 0x00400000; private static final int VULKAN_1_1 = 0x00401000; // GAME_DRIVER_ALL_APPS // UPDATABLE_DRIVER_ALL_APPS // 0: Default (Invalid values fallback to default as well) // 1: All apps use Game Driver // 2: All apps use Prerelease Driver // 1: All apps use updatable production driver // 2: All apps use updatable prerelease driver // 3: All apps use system graphics driver private static final int GAME_DRIVER_GLOBAL_OPT_IN_DEFAULT = 0; private static final int GAME_DRIVER_GLOBAL_OPT_IN_GAME_DRIVER = 1; private static final int GAME_DRIVER_GLOBAL_OPT_IN_PRERELEASE_DRIVER = 2; private static final int GAME_DRIVER_GLOBAL_OPT_IN_OFF = 3; private static final int UPDATABLE_DRIVER_GLOBAL_OPT_IN_DEFAULT = 0; private static final int UPDATABLE_DRIVER_GLOBAL_OPT_IN_PRODUCTION_DRIVER = 1; private static final int UPDATABLE_DRIVER_GLOBAL_OPT_IN_PRERELEASE_DRIVER = 2; private static final int UPDATABLE_DRIVER_GLOBAL_OPT_IN_OFF = 3; private ClassLoader mClassLoader; private String mLibrarySearchPaths; Loading Loading @@ -722,14 +723,17 @@ public class GraphicsEnvironment { * Return the driver package name to use. Return null for system driver. */ private static String chooseDriverInternal(Bundle coreSettings, ApplicationInfo ai) { final String gameDriver = SystemProperties.get(PROPERTY_GFX_DRIVER); final boolean hasGameDriver = gameDriver != null && !gameDriver.isEmpty(); final String productionDriver = SystemProperties.get(PROPERTY_GFX_DRIVER_PRODUCTION); final boolean hasProductionDriver = productionDriver != null && !productionDriver.isEmpty(); final String prereleaseDriver = SystemProperties.get(PROPERTY_GFX_DRIVER_PRERELEASE); final boolean hasPrereleaseDriver = prereleaseDriver != null && !prereleaseDriver.isEmpty(); if (!hasGameDriver && !hasPrereleaseDriver) { if (DEBUG) Log.v(TAG, "Neither Game Driver nor prerelease driver is supported."); if (!hasProductionDriver && !hasPrereleaseDriver) { if (DEBUG) { Log.v(TAG, "Neither updatable production driver nor prerelease driver is supported."); } return null; } Loading @@ -745,56 +749,59 @@ public class GraphicsEnvironment { (ai.metaData != null && ai.metaData.getBoolean(METADATA_DEVELOPER_DRIVER_ENABLE)) || isDebuggable(); // Priority for Game Driver settings global on confliction (Higher priority comes first): // 1. GAME_DRIVER_ALL_APPS // 2. GAME_DRIVER_OPT_OUT_APPS // 3. GAME_DRIVER_PRERELEASE_OPT_IN_APPS // 4. GAME_DRIVER_OPT_IN_APPS // 5. GAME_DRIVER_DENYLIST // 6. GAME_DRIVER_ALLOWLIST switch (coreSettings.getInt(Settings.Global.GAME_DRIVER_ALL_APPS, 0)) { case GAME_DRIVER_GLOBAL_OPT_IN_OFF: if (DEBUG) Log.v(TAG, "Game Driver is turned off on this device."); // Priority of updatable driver settings on confliction (Higher priority comes first): // 1. UPDATABLE_DRIVER_ALL_APPS // 2. UPDATABLE_DRIVER_PRODUCTION_OPT_OUT_APPS // 3. UPDATABLE_DRIVER_PRERELEASE_OPT_IN_APPS // 4. UPDATABLE_DRIVER_PRODUCTION_OPT_IN_APPS // 5. UPDATABLE_DRIVER_PRODUCTION_DENYLIST // 6. UPDATABLE_DRIVER_PRODUCTION_ALLOWLIST switch (coreSettings.getInt(Settings.Global.UPDATABLE_DRIVER_ALL_APPS, 0)) { case UPDATABLE_DRIVER_GLOBAL_OPT_IN_OFF: if (DEBUG) Log.v(TAG, "updatable driver is turned off on this device."); return null; case GAME_DRIVER_GLOBAL_OPT_IN_GAME_DRIVER: if (DEBUG) Log.v(TAG, "All apps opt in to use Game Driver."); return hasGameDriver ? gameDriver : null; case GAME_DRIVER_GLOBAL_OPT_IN_PRERELEASE_DRIVER: if (DEBUG) Log.v(TAG, "All apps opt in to use prerelease driver."); case UPDATABLE_DRIVER_GLOBAL_OPT_IN_PRODUCTION_DRIVER: if (DEBUG) Log.v(TAG, "All apps opt in to use updatable production driver."); return hasProductionDriver ? productionDriver : null; case UPDATABLE_DRIVER_GLOBAL_OPT_IN_PRERELEASE_DRIVER: if (DEBUG) Log.v(TAG, "All apps opt in to use updatable prerelease driver."); return hasPrereleaseDriver && enablePrereleaseDriver ? prereleaseDriver : null; case GAME_DRIVER_GLOBAL_OPT_IN_DEFAULT: case UPDATABLE_DRIVER_GLOBAL_OPT_IN_DEFAULT: default: break; } final String appPackageName = ai.packageName; if (getGlobalSettingsString(null, coreSettings, Settings.Global.GAME_DRIVER_OPT_OUT_APPS) if (getGlobalSettingsString(null, coreSettings, Settings.Global.UPDATABLE_DRIVER_PRODUCTION_OPT_OUT_APPS) .contains(appPackageName)) { if (DEBUG) Log.v(TAG, "App opts out for Game Driver."); if (DEBUG) Log.v(TAG, "App opts out for updatable production driver."); return null; } if (getGlobalSettingsString( null, coreSettings, Settings.Global.GAME_DRIVER_PRERELEASE_OPT_IN_APPS) null, coreSettings, Settings.Global.UPDATABLE_DRIVER_PRERELEASE_OPT_IN_APPS) .contains(appPackageName)) { if (DEBUG) Log.v(TAG, "App opts in for prerelease Game Driver."); if (DEBUG) Log.v(TAG, "App opts in for updatable prerelease driver."); return hasPrereleaseDriver && enablePrereleaseDriver ? prereleaseDriver : null; } // Early return here since the rest logic is only for Game Driver. if (!hasGameDriver) { if (DEBUG) Log.v(TAG, "Game Driver is not supported on the device."); // Early return here since the rest logic is only for updatable production Driver. if (!hasProductionDriver) { if (DEBUG) Log.v(TAG, "Updatable production driver is not supported on the device."); return null; } final boolean isOptIn = getGlobalSettingsString(null, coreSettings, Settings.Global.GAME_DRIVER_OPT_IN_APPS) getGlobalSettingsString(null, coreSettings, Settings.Global.UPDATABLE_DRIVER_PRODUCTION_OPT_IN_APPS) .contains(appPackageName); final List<String> allowlist = getGlobalSettingsString(null, coreSettings, Settings.Global.GAME_DRIVER_ALLOWLIST); if (!isOptIn && allowlist.indexOf(GAME_DRIVER_ALLOWLIST_ALL) != 0 getGlobalSettingsString(null, coreSettings, Settings.Global.UPDATABLE_DRIVER_PRODUCTION_ALLOWLIST); if (!isOptIn && allowlist.indexOf(UPDATABLE_DRIVER_ALLOWLIST_ALL) != 0 && !allowlist.contains(appPackageName)) { if (DEBUG) Log.v(TAG, "App is not on the allowlist for Game Driver."); if (DEBUG) Log.v(TAG, "App is not on the allowlist for updatable production driver."); return null; } Loading @@ -802,13 +809,13 @@ public class GraphicsEnvironment { // terminate early if it's on the denylist and fallback to system driver. if (!isOptIn && getGlobalSettingsString( null, coreSettings, Settings.Global.GAME_DRIVER_DENYLIST) null, coreSettings, Settings.Global.UPDATABLE_DRIVER_PRODUCTION_DENYLIST) .contains(appPackageName)) { if (DEBUG) Log.v(TAG, "App is on the denylist for Game Driver."); if (DEBUG) Log.v(TAG, "App is on the denylist for updatable production driver."); return null; } return gameDriver; return productionDriver; } /** Loading Loading @@ -873,7 +880,7 @@ public class GraphicsEnvironment { final String driverBuildTime = driverAppInfo.metaData.getString(METADATA_DRIVER_BUILD_TIME); if (driverBuildTime == null || driverBuildTime.isEmpty()) { throw new IllegalArgumentException("com.android.gamedriver.build_time is not set"); Log.v(TAG, "com.android.graphics.updatabledriver.build_time is not set"); } // driver_build_time in the meta-data is in "L<Unix epoch timestamp>" format. e.g. L123456. // Long.parseLong will throw if the meta-data "driver_build_time" is not set properly. Loading Loading @@ -901,7 +908,7 @@ public class GraphicsEnvironment { final Context driverContext = context.createPackageContext(driverPackageName, Context.CONTEXT_RESTRICTED); final BufferedReader reader = new BufferedReader(new InputStreamReader( driverContext.getAssets().open(GAME_DRIVER_SPHAL_LIBRARIES_FILENAME))); driverContext.getAssets().open(UPDATABLE_DRIVER_SPHAL_LIBRARIES_FILENAME))); final ArrayList<String> assetStrings = new ArrayList<>(); for (String assetString; (assetString = reader.readLine()) != null;) { assetStrings.add(assetString); Loading @@ -913,7 +920,7 @@ public class GraphicsEnvironment { } } catch (IOException e) { if (DEBUG) { Log.w(TAG, "Failed to load '" + GAME_DRIVER_SPHAL_LIBRARIES_FILENAME + "'"); Log.w(TAG, "Failed to load '" + UPDATABLE_DRIVER_SPHAL_LIBRARIES_FILENAME + "'"); } } return ""; Loading core/java/android/provider/Settings.java +27 −19 Original line number Diff line number Diff line Loading @@ -12291,63 +12291,71 @@ public final class Settings { "show_angle_in_use_dialog_box"; /** * Game Driver global preference for all Apps. * Updatable driver global preference for all Apps. * 0 = Default * 1 = All Apps use Game Driver * 2 = All Apps use system graphics driver * 1 = All Apps use updatable production driver * 2 = All apps use updatable prerelease driver * 3 = All Apps use system graphics driver * @hide */ public static final String GAME_DRIVER_ALL_APPS = "game_driver_all_apps"; public static final String UPDATABLE_DRIVER_ALL_APPS = "updatable_driver_all_apps"; /** * List of Apps selected to use Game Driver. * List of Apps selected to use updatable production driver. * i.e. <pkg1>,<pkg2>,...,<pkgN> * @hide */ public static final String GAME_DRIVER_OPT_IN_APPS = "game_driver_opt_in_apps"; public static final String UPDATABLE_DRIVER_PRODUCTION_OPT_IN_APPS = "updatable_driver_production_opt_in_apps"; /** * List of Apps selected to use prerelease Game Driver. * List of Apps selected to use updatable prerelease driver. * i.e. <pkg1>,<pkg2>,...,<pkgN> * @hide */ public static final String GAME_DRIVER_PRERELEASE_OPT_IN_APPS = "game_driver_prerelease_opt_in_apps"; public static final String UPDATABLE_DRIVER_PRERELEASE_OPT_IN_APPS = "updatable_driver_prerelease_opt_in_apps"; /** * List of Apps selected not to use Game Driver. * List of Apps selected not to use updatable production driver. * i.e. <pkg1>,<pkg2>,...,<pkgN> * @hide */ public static final String GAME_DRIVER_OPT_OUT_APPS = "game_driver_opt_out_apps"; public static final String UPDATABLE_DRIVER_PRODUCTION_OPT_OUT_APPS = "updatable_driver_production_opt_out_apps"; /** * Apps on the denylist that are forbidden to use Game Driver. * Apps on the denylist that are forbidden to use updatable production driver. * @hide */ public static final String GAME_DRIVER_DENYLIST = "game_driver_denylist"; public static final String UPDATABLE_DRIVER_PRODUCTION_DENYLIST = "updatable_driver_production_denylist"; /** * List of denylists, each denylist is a denylist for a specific version of Game Driver. * List of denylists, each denylist is a denylist for a specific version of * updatable production driver. * @hide */ public static final String GAME_DRIVER_DENYLISTS = "game_driver_denylists"; public static final String UPDATABLE_DRIVER_PRODUCTION_DENYLISTS = "updatable_driver_production_denylists"; /** * Apps on the allowlist that are allowed to use Game Driver. * Apps on the allowlist that are allowed to use updatable production driver. * The string is a list of application package names, seperated by comma. * i.e. <apk1>,<apk2>,...,<apkN> * @hide */ public static final String GAME_DRIVER_ALLOWLIST = "game_driver_allowlist"; public static final String UPDATABLE_DRIVER_PRODUCTION_ALLOWLIST = "updatable_driver_production_allowlist"; /** * List of libraries in sphal accessible by Game Driver * List of libraries in sphal accessible by updatable driver * The string is a list of library names, separated by colon. * i.e. <lib1>:<lib2>:...:<libN> * @hide */ public static final String GAME_DRIVER_SPHAL_LIBRARIES = "game_driver_sphal_libraries"; public static final String UPDATABLE_DRIVER_SPHAL_LIBRARIES = "updatable_driver_sphal_libraries"; /** * Ordered GPU debug layer list for Vulkan Loading core/proto/android/app/settings_enums.proto +2 −2 Original line number Diff line number Diff line Loading @@ -2310,10 +2310,10 @@ enum PageId { // OS: Q ZEN_CUSTOM_SETTINGS_DIALOG = 1612; // OPEN: Settings > Developer Options > Game Driver Preferences // OPEN: Settings > Developer Options > Graphics Driver Preferences // CATEGORY: SETTINGS // OS: Q SETTINGS_GAME_DRIVER_DASHBOARD = 1613; SETTINGS_GRAPHICS_DRIVER_DASHBOARD = 1613; // OPEN: Settings > Accessibility > Vibration > Ring vibration // CATEGORY: SETTINGS Loading core/proto/android/providers/settings/global.proto +20 −19 Original line number Diff line number Diff line Loading @@ -433,35 +433,36 @@ message GlobalSettingsProto { // Ordered GPU debug layer list for GLES // i.e. <layer1>:<layer2>:...:<layerN> optional SettingProto debug_layers_gles = 7; // Game Driver - global preference for all Apps // Updatable Driver - global preference for all Apps // 0 = Default // 1 = All Apps use Game Driver // 2 = All Apps use system graphics driver optional SettingProto game_driver_all_apps = 8; // Game Driver - List of Apps selected to use Game Driver // 1 = All Apps use updatable production driver // 2 = All apps use updatable prerelease driver // 3 = All Apps use system graphics driver optional SettingProto updatable_driver_all_apps = 8; // Updatable Driver - List of Apps selected to use updatable production driver // i.e. <pkg1>,<pkg2>,...,<pkgN> optional SettingProto game_driver_opt_in_apps = 9; // Game Driver - List of Apps selected not to use Game Driver optional SettingProto updatable_driver_production_opt_in_apps = 9; // Updatable Driver - List of Apps selected not to use updatable production driver // i.e. <pkg1>,<pkg2>,...,<pkgN> optional SettingProto game_driver_opt_out_apps = 10; // Game Driver - List of Apps that are forbidden to use Game Driver optional SettingProto game_driver_denylist = 11; // Game Driver - List of Apps that are allowed to use Game Driver optional SettingProto game_driver_allowlist = 12; optional SettingProto updatable_driver_production_opt_out_apps = 10; // Updatable Driver - List of Apps that are forbidden to use updatable production driver optional SettingProto updatable_driver_production_denylist = 11; // Updatable Driver - List of Apps that are allowed to use updatable production driver optional SettingProto updatable_driver_production_allowlist = 12; // ANGLE - List of Apps that can check ANGLE rules optional SettingProto angle_allowlist = 13; // Game Driver - List of denylists, each denylist is a denylist for // a specific Game Driver version optional SettingProto game_driver_denylists = 14; // Updatable Driver - List of denylists, each denylist is a denylist for // a specific updatable production driver version optional SettingProto updatable_driver_production_denylists = 14; // ANGLE - Show a dialog box when ANGLE is selected for the currently running PKG optional SettingProto show_angle_in_use_dialog = 15; // Game Driver - List of libraries in sphal accessible by Game Driver optional SettingProto game_driver_sphal_libraries = 16; // Updatable Driver - List of libraries in sphal accessible by updatable driver optional SettingProto updatable_driver_sphal_libraries = 16; // ANGLE - External package containing ANGLE libraries optional SettingProto angle_debug_package = 17; // Game Driver - List of Apps selected to use prerelease Game Driver // Updatable Driver - List of Apps selected to use updatable prerelease driver // i.e. <pkg1>,<pkg2>,...,<pkgN> optional SettingProto game_driver_prerelease_opt_in_apps = 18; optional SettingProto updatable_driver_prerelease_opt_in_apps = 18; } optional Gpu gpu = 59; Loading packages/SettingsProvider/src/com/android/providers/settings/SettingsProtoDumpUtil.java +16 −16 Original line number Diff line number Diff line Loading @@ -773,29 +773,29 @@ class SettingsProtoDumpUtil { Settings.Global.GPU_DEBUG_LAYERS_GLES, GlobalSettingsProto.Gpu.DEBUG_LAYERS_GLES); dumpSetting(s, p, Settings.Global.GAME_DRIVER_ALL_APPS, GlobalSettingsProto.Gpu.GAME_DRIVER_ALL_APPS); Settings.Global.UPDATABLE_DRIVER_ALL_APPS, GlobalSettingsProto.Gpu.UPDATABLE_DRIVER_ALL_APPS); dumpSetting(s, p, Settings.Global.GAME_DRIVER_OPT_IN_APPS, GlobalSettingsProto.Gpu.GAME_DRIVER_OPT_IN_APPS); Settings.Global.UPDATABLE_DRIVER_PRODUCTION_OPT_IN_APPS, GlobalSettingsProto.Gpu.UPDATABLE_DRIVER_PRODUCTION_OPT_IN_APPS); dumpSetting(s, p, Settings.Global.GAME_DRIVER_PRERELEASE_OPT_IN_APPS, GlobalSettingsProto.Gpu.GAME_DRIVER_PRERELEASE_OPT_IN_APPS); Settings.Global.UPDATABLE_DRIVER_PRERELEASE_OPT_IN_APPS, GlobalSettingsProto.Gpu.UPDATABLE_DRIVER_PRERELEASE_OPT_IN_APPS); dumpSetting(s, p, Settings.Global.GAME_DRIVER_OPT_OUT_APPS, GlobalSettingsProto.Gpu.GAME_DRIVER_OPT_OUT_APPS); Settings.Global.UPDATABLE_DRIVER_PRODUCTION_OPT_OUT_APPS, GlobalSettingsProto.Gpu.UPDATABLE_DRIVER_PRODUCTION_OPT_OUT_APPS); dumpSetting(s, p, Settings.Global.GAME_DRIVER_DENYLIST, GlobalSettingsProto.Gpu.GAME_DRIVER_DENYLIST); Settings.Global.UPDATABLE_DRIVER_PRODUCTION_DENYLIST, GlobalSettingsProto.Gpu.UPDATABLE_DRIVER_PRODUCTION_DENYLIST); dumpSetting(s, p, Settings.Global.GAME_DRIVER_ALLOWLIST, GlobalSettingsProto.Gpu.GAME_DRIVER_ALLOWLIST); Settings.Global.UPDATABLE_DRIVER_PRODUCTION_ALLOWLIST, GlobalSettingsProto.Gpu.UPDATABLE_DRIVER_PRODUCTION_ALLOWLIST); dumpSetting(s, p, Settings.Global.GAME_DRIVER_DENYLISTS, GlobalSettingsProto.Gpu.GAME_DRIVER_DENYLISTS); Settings.Global.UPDATABLE_DRIVER_PRODUCTION_DENYLISTS, GlobalSettingsProto.Gpu.UPDATABLE_DRIVER_PRODUCTION_DENYLISTS); dumpSetting(s, p, Settings.Global.GAME_DRIVER_SPHAL_LIBRARIES, GlobalSettingsProto.Gpu.GAME_DRIVER_SPHAL_LIBRARIES); Settings.Global.UPDATABLE_DRIVER_SPHAL_LIBRARIES, GlobalSettingsProto.Gpu.UPDATABLE_DRIVER_SPHAL_LIBRARIES); p.end(gpuToken); final long hdmiToken = p.start(GlobalSettingsProto.HDMI); Loading Loading
core/java/android/os/GraphicsEnvironment.java +55 −48 Original line number Diff line number Diff line Loading @@ -64,10 +64,11 @@ public class GraphicsEnvironment { private static final String SYSTEM_DRIVER_NAME = "system"; private static final String SYSTEM_DRIVER_VERSION_NAME = ""; private static final long SYSTEM_DRIVER_VERSION_CODE = 0; private static final String PROPERTY_GFX_DRIVER = "ro.gfx.driver.0"; private static final String PROPERTY_GFX_DRIVER_PRODUCTION = "ro.gfx.driver.0"; private static final String PROPERTY_GFX_DRIVER_PRERELEASE = "ro.gfx.driver.1"; private static final String PROPERTY_GFX_DRIVER_BUILD_TIME = "ro.gfx.driver_build_time"; private static final String METADATA_DRIVER_BUILD_TIME = "com.android.gamedriver.build_time"; private static final String METADATA_DRIVER_BUILD_TIME = "com.android.graphics.updatabledriver.build_time"; private static final String METADATA_DEVELOPER_DRIVER_ENABLE = "com.android.graphics.developerdriver.enable"; private static final String METADATA_INJECT_LAYERS_ENABLE = Loading @@ -78,20 +79,20 @@ public class GraphicsEnvironment { private static final String ACTION_ANGLE_FOR_ANDROID_TOAST_MESSAGE = "android.app.action.ANGLE_FOR_ANDROID_TOAST_MESSAGE"; private static final String INTENT_KEY_A4A_TOAST_MESSAGE = "A4A Toast Message"; private static final String GAME_DRIVER_ALLOWLIST_ALL = "*"; private static final String GAME_DRIVER_SPHAL_LIBRARIES_FILENAME = "sphal_libraries.txt"; private static final String UPDATABLE_DRIVER_ALLOWLIST_ALL = "*"; private static final String UPDATABLE_DRIVER_SPHAL_LIBRARIES_FILENAME = "sphal_libraries.txt"; private static final int VULKAN_1_0 = 0x00400000; private static final int VULKAN_1_1 = 0x00401000; // GAME_DRIVER_ALL_APPS // UPDATABLE_DRIVER_ALL_APPS // 0: Default (Invalid values fallback to default as well) // 1: All apps use Game Driver // 2: All apps use Prerelease Driver // 1: All apps use updatable production driver // 2: All apps use updatable prerelease driver // 3: All apps use system graphics driver private static final int GAME_DRIVER_GLOBAL_OPT_IN_DEFAULT = 0; private static final int GAME_DRIVER_GLOBAL_OPT_IN_GAME_DRIVER = 1; private static final int GAME_DRIVER_GLOBAL_OPT_IN_PRERELEASE_DRIVER = 2; private static final int GAME_DRIVER_GLOBAL_OPT_IN_OFF = 3; private static final int UPDATABLE_DRIVER_GLOBAL_OPT_IN_DEFAULT = 0; private static final int UPDATABLE_DRIVER_GLOBAL_OPT_IN_PRODUCTION_DRIVER = 1; private static final int UPDATABLE_DRIVER_GLOBAL_OPT_IN_PRERELEASE_DRIVER = 2; private static final int UPDATABLE_DRIVER_GLOBAL_OPT_IN_OFF = 3; private ClassLoader mClassLoader; private String mLibrarySearchPaths; Loading Loading @@ -722,14 +723,17 @@ public class GraphicsEnvironment { * Return the driver package name to use. Return null for system driver. */ private static String chooseDriverInternal(Bundle coreSettings, ApplicationInfo ai) { final String gameDriver = SystemProperties.get(PROPERTY_GFX_DRIVER); final boolean hasGameDriver = gameDriver != null && !gameDriver.isEmpty(); final String productionDriver = SystemProperties.get(PROPERTY_GFX_DRIVER_PRODUCTION); final boolean hasProductionDriver = productionDriver != null && !productionDriver.isEmpty(); final String prereleaseDriver = SystemProperties.get(PROPERTY_GFX_DRIVER_PRERELEASE); final boolean hasPrereleaseDriver = prereleaseDriver != null && !prereleaseDriver.isEmpty(); if (!hasGameDriver && !hasPrereleaseDriver) { if (DEBUG) Log.v(TAG, "Neither Game Driver nor prerelease driver is supported."); if (!hasProductionDriver && !hasPrereleaseDriver) { if (DEBUG) { Log.v(TAG, "Neither updatable production driver nor prerelease driver is supported."); } return null; } Loading @@ -745,56 +749,59 @@ public class GraphicsEnvironment { (ai.metaData != null && ai.metaData.getBoolean(METADATA_DEVELOPER_DRIVER_ENABLE)) || isDebuggable(); // Priority for Game Driver settings global on confliction (Higher priority comes first): // 1. GAME_DRIVER_ALL_APPS // 2. GAME_DRIVER_OPT_OUT_APPS // 3. GAME_DRIVER_PRERELEASE_OPT_IN_APPS // 4. GAME_DRIVER_OPT_IN_APPS // 5. GAME_DRIVER_DENYLIST // 6. GAME_DRIVER_ALLOWLIST switch (coreSettings.getInt(Settings.Global.GAME_DRIVER_ALL_APPS, 0)) { case GAME_DRIVER_GLOBAL_OPT_IN_OFF: if (DEBUG) Log.v(TAG, "Game Driver is turned off on this device."); // Priority of updatable driver settings on confliction (Higher priority comes first): // 1. UPDATABLE_DRIVER_ALL_APPS // 2. UPDATABLE_DRIVER_PRODUCTION_OPT_OUT_APPS // 3. UPDATABLE_DRIVER_PRERELEASE_OPT_IN_APPS // 4. UPDATABLE_DRIVER_PRODUCTION_OPT_IN_APPS // 5. UPDATABLE_DRIVER_PRODUCTION_DENYLIST // 6. UPDATABLE_DRIVER_PRODUCTION_ALLOWLIST switch (coreSettings.getInt(Settings.Global.UPDATABLE_DRIVER_ALL_APPS, 0)) { case UPDATABLE_DRIVER_GLOBAL_OPT_IN_OFF: if (DEBUG) Log.v(TAG, "updatable driver is turned off on this device."); return null; case GAME_DRIVER_GLOBAL_OPT_IN_GAME_DRIVER: if (DEBUG) Log.v(TAG, "All apps opt in to use Game Driver."); return hasGameDriver ? gameDriver : null; case GAME_DRIVER_GLOBAL_OPT_IN_PRERELEASE_DRIVER: if (DEBUG) Log.v(TAG, "All apps opt in to use prerelease driver."); case UPDATABLE_DRIVER_GLOBAL_OPT_IN_PRODUCTION_DRIVER: if (DEBUG) Log.v(TAG, "All apps opt in to use updatable production driver."); return hasProductionDriver ? productionDriver : null; case UPDATABLE_DRIVER_GLOBAL_OPT_IN_PRERELEASE_DRIVER: if (DEBUG) Log.v(TAG, "All apps opt in to use updatable prerelease driver."); return hasPrereleaseDriver && enablePrereleaseDriver ? prereleaseDriver : null; case GAME_DRIVER_GLOBAL_OPT_IN_DEFAULT: case UPDATABLE_DRIVER_GLOBAL_OPT_IN_DEFAULT: default: break; } final String appPackageName = ai.packageName; if (getGlobalSettingsString(null, coreSettings, Settings.Global.GAME_DRIVER_OPT_OUT_APPS) if (getGlobalSettingsString(null, coreSettings, Settings.Global.UPDATABLE_DRIVER_PRODUCTION_OPT_OUT_APPS) .contains(appPackageName)) { if (DEBUG) Log.v(TAG, "App opts out for Game Driver."); if (DEBUG) Log.v(TAG, "App opts out for updatable production driver."); return null; } if (getGlobalSettingsString( null, coreSettings, Settings.Global.GAME_DRIVER_PRERELEASE_OPT_IN_APPS) null, coreSettings, Settings.Global.UPDATABLE_DRIVER_PRERELEASE_OPT_IN_APPS) .contains(appPackageName)) { if (DEBUG) Log.v(TAG, "App opts in for prerelease Game Driver."); if (DEBUG) Log.v(TAG, "App opts in for updatable prerelease driver."); return hasPrereleaseDriver && enablePrereleaseDriver ? prereleaseDriver : null; } // Early return here since the rest logic is only for Game Driver. if (!hasGameDriver) { if (DEBUG) Log.v(TAG, "Game Driver is not supported on the device."); // Early return here since the rest logic is only for updatable production Driver. if (!hasProductionDriver) { if (DEBUG) Log.v(TAG, "Updatable production driver is not supported on the device."); return null; } final boolean isOptIn = getGlobalSettingsString(null, coreSettings, Settings.Global.GAME_DRIVER_OPT_IN_APPS) getGlobalSettingsString(null, coreSettings, Settings.Global.UPDATABLE_DRIVER_PRODUCTION_OPT_IN_APPS) .contains(appPackageName); final List<String> allowlist = getGlobalSettingsString(null, coreSettings, Settings.Global.GAME_DRIVER_ALLOWLIST); if (!isOptIn && allowlist.indexOf(GAME_DRIVER_ALLOWLIST_ALL) != 0 getGlobalSettingsString(null, coreSettings, Settings.Global.UPDATABLE_DRIVER_PRODUCTION_ALLOWLIST); if (!isOptIn && allowlist.indexOf(UPDATABLE_DRIVER_ALLOWLIST_ALL) != 0 && !allowlist.contains(appPackageName)) { if (DEBUG) Log.v(TAG, "App is not on the allowlist for Game Driver."); if (DEBUG) Log.v(TAG, "App is not on the allowlist for updatable production driver."); return null; } Loading @@ -802,13 +809,13 @@ public class GraphicsEnvironment { // terminate early if it's on the denylist and fallback to system driver. if (!isOptIn && getGlobalSettingsString( null, coreSettings, Settings.Global.GAME_DRIVER_DENYLIST) null, coreSettings, Settings.Global.UPDATABLE_DRIVER_PRODUCTION_DENYLIST) .contains(appPackageName)) { if (DEBUG) Log.v(TAG, "App is on the denylist for Game Driver."); if (DEBUG) Log.v(TAG, "App is on the denylist for updatable production driver."); return null; } return gameDriver; return productionDriver; } /** Loading Loading @@ -873,7 +880,7 @@ public class GraphicsEnvironment { final String driverBuildTime = driverAppInfo.metaData.getString(METADATA_DRIVER_BUILD_TIME); if (driverBuildTime == null || driverBuildTime.isEmpty()) { throw new IllegalArgumentException("com.android.gamedriver.build_time is not set"); Log.v(TAG, "com.android.graphics.updatabledriver.build_time is not set"); } // driver_build_time in the meta-data is in "L<Unix epoch timestamp>" format. e.g. L123456. // Long.parseLong will throw if the meta-data "driver_build_time" is not set properly. Loading Loading @@ -901,7 +908,7 @@ public class GraphicsEnvironment { final Context driverContext = context.createPackageContext(driverPackageName, Context.CONTEXT_RESTRICTED); final BufferedReader reader = new BufferedReader(new InputStreamReader( driverContext.getAssets().open(GAME_DRIVER_SPHAL_LIBRARIES_FILENAME))); driverContext.getAssets().open(UPDATABLE_DRIVER_SPHAL_LIBRARIES_FILENAME))); final ArrayList<String> assetStrings = new ArrayList<>(); for (String assetString; (assetString = reader.readLine()) != null;) { assetStrings.add(assetString); Loading @@ -913,7 +920,7 @@ public class GraphicsEnvironment { } } catch (IOException e) { if (DEBUG) { Log.w(TAG, "Failed to load '" + GAME_DRIVER_SPHAL_LIBRARIES_FILENAME + "'"); Log.w(TAG, "Failed to load '" + UPDATABLE_DRIVER_SPHAL_LIBRARIES_FILENAME + "'"); } } return ""; Loading
core/java/android/provider/Settings.java +27 −19 Original line number Diff line number Diff line Loading @@ -12291,63 +12291,71 @@ public final class Settings { "show_angle_in_use_dialog_box"; /** * Game Driver global preference for all Apps. * Updatable driver global preference for all Apps. * 0 = Default * 1 = All Apps use Game Driver * 2 = All Apps use system graphics driver * 1 = All Apps use updatable production driver * 2 = All apps use updatable prerelease driver * 3 = All Apps use system graphics driver * @hide */ public static final String GAME_DRIVER_ALL_APPS = "game_driver_all_apps"; public static final String UPDATABLE_DRIVER_ALL_APPS = "updatable_driver_all_apps"; /** * List of Apps selected to use Game Driver. * List of Apps selected to use updatable production driver. * i.e. <pkg1>,<pkg2>,...,<pkgN> * @hide */ public static final String GAME_DRIVER_OPT_IN_APPS = "game_driver_opt_in_apps"; public static final String UPDATABLE_DRIVER_PRODUCTION_OPT_IN_APPS = "updatable_driver_production_opt_in_apps"; /** * List of Apps selected to use prerelease Game Driver. * List of Apps selected to use updatable prerelease driver. * i.e. <pkg1>,<pkg2>,...,<pkgN> * @hide */ public static final String GAME_DRIVER_PRERELEASE_OPT_IN_APPS = "game_driver_prerelease_opt_in_apps"; public static final String UPDATABLE_DRIVER_PRERELEASE_OPT_IN_APPS = "updatable_driver_prerelease_opt_in_apps"; /** * List of Apps selected not to use Game Driver. * List of Apps selected not to use updatable production driver. * i.e. <pkg1>,<pkg2>,...,<pkgN> * @hide */ public static final String GAME_DRIVER_OPT_OUT_APPS = "game_driver_opt_out_apps"; public static final String UPDATABLE_DRIVER_PRODUCTION_OPT_OUT_APPS = "updatable_driver_production_opt_out_apps"; /** * Apps on the denylist that are forbidden to use Game Driver. * Apps on the denylist that are forbidden to use updatable production driver. * @hide */ public static final String GAME_DRIVER_DENYLIST = "game_driver_denylist"; public static final String UPDATABLE_DRIVER_PRODUCTION_DENYLIST = "updatable_driver_production_denylist"; /** * List of denylists, each denylist is a denylist for a specific version of Game Driver. * List of denylists, each denylist is a denylist for a specific version of * updatable production driver. * @hide */ public static final String GAME_DRIVER_DENYLISTS = "game_driver_denylists"; public static final String UPDATABLE_DRIVER_PRODUCTION_DENYLISTS = "updatable_driver_production_denylists"; /** * Apps on the allowlist that are allowed to use Game Driver. * Apps on the allowlist that are allowed to use updatable production driver. * The string is a list of application package names, seperated by comma. * i.e. <apk1>,<apk2>,...,<apkN> * @hide */ public static final String GAME_DRIVER_ALLOWLIST = "game_driver_allowlist"; public static final String UPDATABLE_DRIVER_PRODUCTION_ALLOWLIST = "updatable_driver_production_allowlist"; /** * List of libraries in sphal accessible by Game Driver * List of libraries in sphal accessible by updatable driver * The string is a list of library names, separated by colon. * i.e. <lib1>:<lib2>:...:<libN> * @hide */ public static final String GAME_DRIVER_SPHAL_LIBRARIES = "game_driver_sphal_libraries"; public static final String UPDATABLE_DRIVER_SPHAL_LIBRARIES = "updatable_driver_sphal_libraries"; /** * Ordered GPU debug layer list for Vulkan Loading
core/proto/android/app/settings_enums.proto +2 −2 Original line number Diff line number Diff line Loading @@ -2310,10 +2310,10 @@ enum PageId { // OS: Q ZEN_CUSTOM_SETTINGS_DIALOG = 1612; // OPEN: Settings > Developer Options > Game Driver Preferences // OPEN: Settings > Developer Options > Graphics Driver Preferences // CATEGORY: SETTINGS // OS: Q SETTINGS_GAME_DRIVER_DASHBOARD = 1613; SETTINGS_GRAPHICS_DRIVER_DASHBOARD = 1613; // OPEN: Settings > Accessibility > Vibration > Ring vibration // CATEGORY: SETTINGS Loading
core/proto/android/providers/settings/global.proto +20 −19 Original line number Diff line number Diff line Loading @@ -433,35 +433,36 @@ message GlobalSettingsProto { // Ordered GPU debug layer list for GLES // i.e. <layer1>:<layer2>:...:<layerN> optional SettingProto debug_layers_gles = 7; // Game Driver - global preference for all Apps // Updatable Driver - global preference for all Apps // 0 = Default // 1 = All Apps use Game Driver // 2 = All Apps use system graphics driver optional SettingProto game_driver_all_apps = 8; // Game Driver - List of Apps selected to use Game Driver // 1 = All Apps use updatable production driver // 2 = All apps use updatable prerelease driver // 3 = All Apps use system graphics driver optional SettingProto updatable_driver_all_apps = 8; // Updatable Driver - List of Apps selected to use updatable production driver // i.e. <pkg1>,<pkg2>,...,<pkgN> optional SettingProto game_driver_opt_in_apps = 9; // Game Driver - List of Apps selected not to use Game Driver optional SettingProto updatable_driver_production_opt_in_apps = 9; // Updatable Driver - List of Apps selected not to use updatable production driver // i.e. <pkg1>,<pkg2>,...,<pkgN> optional SettingProto game_driver_opt_out_apps = 10; // Game Driver - List of Apps that are forbidden to use Game Driver optional SettingProto game_driver_denylist = 11; // Game Driver - List of Apps that are allowed to use Game Driver optional SettingProto game_driver_allowlist = 12; optional SettingProto updatable_driver_production_opt_out_apps = 10; // Updatable Driver - List of Apps that are forbidden to use updatable production driver optional SettingProto updatable_driver_production_denylist = 11; // Updatable Driver - List of Apps that are allowed to use updatable production driver optional SettingProto updatable_driver_production_allowlist = 12; // ANGLE - List of Apps that can check ANGLE rules optional SettingProto angle_allowlist = 13; // Game Driver - List of denylists, each denylist is a denylist for // a specific Game Driver version optional SettingProto game_driver_denylists = 14; // Updatable Driver - List of denylists, each denylist is a denylist for // a specific updatable production driver version optional SettingProto updatable_driver_production_denylists = 14; // ANGLE - Show a dialog box when ANGLE is selected for the currently running PKG optional SettingProto show_angle_in_use_dialog = 15; // Game Driver - List of libraries in sphal accessible by Game Driver optional SettingProto game_driver_sphal_libraries = 16; // Updatable Driver - List of libraries in sphal accessible by updatable driver optional SettingProto updatable_driver_sphal_libraries = 16; // ANGLE - External package containing ANGLE libraries optional SettingProto angle_debug_package = 17; // Game Driver - List of Apps selected to use prerelease Game Driver // Updatable Driver - List of Apps selected to use updatable prerelease driver // i.e. <pkg1>,<pkg2>,...,<pkgN> optional SettingProto game_driver_prerelease_opt_in_apps = 18; optional SettingProto updatable_driver_prerelease_opt_in_apps = 18; } optional Gpu gpu = 59; Loading
packages/SettingsProvider/src/com/android/providers/settings/SettingsProtoDumpUtil.java +16 −16 Original line number Diff line number Diff line Loading @@ -773,29 +773,29 @@ class SettingsProtoDumpUtil { Settings.Global.GPU_DEBUG_LAYERS_GLES, GlobalSettingsProto.Gpu.DEBUG_LAYERS_GLES); dumpSetting(s, p, Settings.Global.GAME_DRIVER_ALL_APPS, GlobalSettingsProto.Gpu.GAME_DRIVER_ALL_APPS); Settings.Global.UPDATABLE_DRIVER_ALL_APPS, GlobalSettingsProto.Gpu.UPDATABLE_DRIVER_ALL_APPS); dumpSetting(s, p, Settings.Global.GAME_DRIVER_OPT_IN_APPS, GlobalSettingsProto.Gpu.GAME_DRIVER_OPT_IN_APPS); Settings.Global.UPDATABLE_DRIVER_PRODUCTION_OPT_IN_APPS, GlobalSettingsProto.Gpu.UPDATABLE_DRIVER_PRODUCTION_OPT_IN_APPS); dumpSetting(s, p, Settings.Global.GAME_DRIVER_PRERELEASE_OPT_IN_APPS, GlobalSettingsProto.Gpu.GAME_DRIVER_PRERELEASE_OPT_IN_APPS); Settings.Global.UPDATABLE_DRIVER_PRERELEASE_OPT_IN_APPS, GlobalSettingsProto.Gpu.UPDATABLE_DRIVER_PRERELEASE_OPT_IN_APPS); dumpSetting(s, p, Settings.Global.GAME_DRIVER_OPT_OUT_APPS, GlobalSettingsProto.Gpu.GAME_DRIVER_OPT_OUT_APPS); Settings.Global.UPDATABLE_DRIVER_PRODUCTION_OPT_OUT_APPS, GlobalSettingsProto.Gpu.UPDATABLE_DRIVER_PRODUCTION_OPT_OUT_APPS); dumpSetting(s, p, Settings.Global.GAME_DRIVER_DENYLIST, GlobalSettingsProto.Gpu.GAME_DRIVER_DENYLIST); Settings.Global.UPDATABLE_DRIVER_PRODUCTION_DENYLIST, GlobalSettingsProto.Gpu.UPDATABLE_DRIVER_PRODUCTION_DENYLIST); dumpSetting(s, p, Settings.Global.GAME_DRIVER_ALLOWLIST, GlobalSettingsProto.Gpu.GAME_DRIVER_ALLOWLIST); Settings.Global.UPDATABLE_DRIVER_PRODUCTION_ALLOWLIST, GlobalSettingsProto.Gpu.UPDATABLE_DRIVER_PRODUCTION_ALLOWLIST); dumpSetting(s, p, Settings.Global.GAME_DRIVER_DENYLISTS, GlobalSettingsProto.Gpu.GAME_DRIVER_DENYLISTS); Settings.Global.UPDATABLE_DRIVER_PRODUCTION_DENYLISTS, GlobalSettingsProto.Gpu.UPDATABLE_DRIVER_PRODUCTION_DENYLISTS); dumpSetting(s, p, Settings.Global.GAME_DRIVER_SPHAL_LIBRARIES, GlobalSettingsProto.Gpu.GAME_DRIVER_SPHAL_LIBRARIES); Settings.Global.UPDATABLE_DRIVER_SPHAL_LIBRARIES, GlobalSettingsProto.Gpu.UPDATABLE_DRIVER_SPHAL_LIBRARIES); p.end(gpuToken); final long hdmiToken = p.start(GlobalSettingsProto.HDMI); Loading