Merge changes from topic "angle_rules_fast_path"
* changes: Guard ANGLE rules checking with a whitelist Revert "Revert "Enable ANGLE-for-Android rule processing again""
This commit is contained in:
committed by
Android (Google) Code Review
commit
1fcbf83856
@@ -368,26 +368,6 @@ public class GraphicsEnvironment {
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Attempt to setup ANGLE with a (temporary) default rules file: b/121153494
|
||||
* True: Rules file was loaded.
|
||||
* False: Rules file was *not* loaded.
|
||||
*/
|
||||
private boolean setupAngleRulesDebug(String packageName, String paths, String devOptIn) {
|
||||
// b/121153494
|
||||
// Skip APK rules file checking.
|
||||
if (!DEBUG) {
|
||||
Log.v(TAG, "Skipping loading the rules file.");
|
||||
// Fill in some default values for now, so the loader can get an answer when it asks.
|
||||
// Most importantly, we need to indicate which app we are init'ing and what the
|
||||
// developer options for it are so we can turn on ANGLE if needed.
|
||||
setAngleInfo(paths, packageName, devOptIn, null, 0, 0);
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Attempt to setup ANGLE with a rules file loaded from the ANGLE APK.
|
||||
* True: APK rules file was loaded.
|
||||
@@ -424,17 +404,58 @@ public class GraphicsEnvironment {
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Pull ANGLE whitelist from GlobalSettings and compare against current package
|
||||
*/
|
||||
private boolean checkAngleWhitelist(Bundle bundle, String packageName) {
|
||||
List<String> angleWhitelist =
|
||||
getGlobalSettingsString(bundle,
|
||||
Settings.Global.GLOBAL_SETTINGS_ANGLE_WHITELIST);
|
||||
|
||||
return angleWhitelist.contains(packageName);
|
||||
}
|
||||
|
||||
/**
|
||||
* Pass ANGLE details down to trigger enable logic
|
||||
*/
|
||||
public void setupAngle(Context context, Bundle bundle, String packageName) {
|
||||
String devOptIn = getDriverForPkg(bundle, packageName);
|
||||
if (packageName.isEmpty()) {
|
||||
Log.v(TAG, "No package name available yet, skipping ANGLE setup");
|
||||
return;
|
||||
}
|
||||
|
||||
String devOptIn = getDriverForPkg(bundle, packageName);
|
||||
if (DEBUG) {
|
||||
Log.v(TAG, "ANGLE Developer option for '" + packageName + "' "
|
||||
+ "set to: '" + devOptIn + "'");
|
||||
}
|
||||
|
||||
// We only need to check rules if the app is whitelisted or the developer has
|
||||
// explicitly chosen something other than default driver.
|
||||
//
|
||||
// The whitelist will be generated by the ANGLE APK at both boot time and
|
||||
// ANGLE update time. It will only include apps mentioned in the rules file.
|
||||
//
|
||||
// If the user has set the developer option to something other than default,
|
||||
// we need to call setupAngleRulesApk() with the package name and the developer
|
||||
// option value (native/angle/other). Then later when we are actually trying to
|
||||
// load a driver, GraphicsEnv::shouldUseAngle() has seen the package name before
|
||||
// and can confidently answer yes/no based on the previously set developer
|
||||
// option value.
|
||||
boolean whitelisted = checkAngleWhitelist(bundle, packageName);
|
||||
boolean defaulted = devOptIn.equals(sDriverMap.get(OpenGlDriverChoice.DEFAULT));
|
||||
boolean rulesCheck = (whitelisted || !defaulted);
|
||||
if (!rulesCheck) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (whitelisted) {
|
||||
Log.v(TAG, "ANGLE whitelist includes " + packageName);
|
||||
}
|
||||
if (!defaulted) {
|
||||
Log.v(TAG, "ANGLE developer option for " + packageName + ": " + devOptIn);
|
||||
}
|
||||
|
||||
String anglePkgName = getAnglePackageName(context);
|
||||
if (anglePkgName.isEmpty()) {
|
||||
Log.e(TAG, "Failed to find ANGLE package.");
|
||||
@@ -466,12 +487,6 @@ public class GraphicsEnvironment {
|
||||
return;
|
||||
}
|
||||
|
||||
// b/121153494
|
||||
if (setupAngleRulesDebug(packageName, paths, devOptIn)) {
|
||||
// We setup ANGLE with defaults, so we're done here.
|
||||
return;
|
||||
}
|
||||
|
||||
if (setupAngleRulesApk(anglePkgName, angleInfo, context, packageName, paths, devOptIn)) {
|
||||
// We setup ANGLE with rules from the APK, so we're done here.
|
||||
return;
|
||||
|
||||
@@ -12147,6 +12147,13 @@ public final class Settings {
|
||||
public static final String GLOBAL_SETTINGS_ANGLE_GL_DRIVER_SELECTION_VALUES =
|
||||
"angle_gl_driver_selection_values";
|
||||
|
||||
/**
|
||||
* List of package names that should check ANGLE rules
|
||||
* @hide
|
||||
*/
|
||||
public static final String GLOBAL_SETTINGS_ANGLE_WHITELIST =
|
||||
"angle_whitelist";
|
||||
|
||||
/**
|
||||
* Game Update Package global preference for all Apps.
|
||||
* 0 = Default
|
||||
|
||||
@@ -451,6 +451,8 @@ message GlobalSettingsProto {
|
||||
optional SettingProto gup_blacklist = 11;
|
||||
// List of Apps that are allowed to use Game Driver package.
|
||||
optional SettingProto game_driver_whitelist = 12;
|
||||
// ANGLE - List of Apps that can check ANGLE rules
|
||||
optional SettingProto angle_whitelist = 13;
|
||||
}
|
||||
optional Gpu gpu = 59;
|
||||
|
||||
|
||||
@@ -481,6 +481,7 @@ public class SettingsBackupTest {
|
||||
Settings.Global.GLOBAL_SETTINGS_ANGLE_GL_DRIVER_ALL_ANGLE,
|
||||
Settings.Global.GLOBAL_SETTINGS_ANGLE_GL_DRIVER_SELECTION_PKGS,
|
||||
Settings.Global.GLOBAL_SETTINGS_ANGLE_GL_DRIVER_SELECTION_VALUES,
|
||||
Settings.Global.GLOBAL_SETTINGS_ANGLE_WHITELIST,
|
||||
Settings.Global.GUP_DEV_ALL_APPS,
|
||||
Settings.Global.GUP_DEV_OPT_IN_APPS,
|
||||
Settings.Global.GUP_DEV_OPT_OUT_APPS,
|
||||
|
||||
@@ -697,6 +697,9 @@ class SettingsProtoDumpUtil {
|
||||
dumpSetting(s, p,
|
||||
Settings.Global.GLOBAL_SETTINGS_ANGLE_GL_DRIVER_SELECTION_VALUES,
|
||||
GlobalSettingsProto.Gpu.ANGLE_GL_DRIVER_SELECTION_VALUES);
|
||||
dumpSetting(s, p,
|
||||
Settings.Global.GLOBAL_SETTINGS_ANGLE_WHITELIST,
|
||||
GlobalSettingsProto.Gpu.ANGLE_WHITELIST);
|
||||
dumpSetting(s, p,
|
||||
Settings.Global.GPU_DEBUG_LAYER_APP,
|
||||
GlobalSettingsProto.Gpu.DEBUG_LAYER_APP);
|
||||
|
||||
@@ -61,6 +61,8 @@ final class CoreSettingsObserver extends ContentObserver {
|
||||
Settings.Global.GLOBAL_SETTINGS_ANGLE_GL_DRIVER_SELECTION_PKGS, String.class);
|
||||
sGlobalSettingToTypeMap.put(
|
||||
Settings.Global.GLOBAL_SETTINGS_ANGLE_GL_DRIVER_SELECTION_VALUES, String.class);
|
||||
sGlobalSettingToTypeMap.put(
|
||||
Settings.Global.GLOBAL_SETTINGS_ANGLE_WHITELIST, String.class);
|
||||
sGlobalSettingToTypeMap.put(Settings.Global.ENABLE_GPU_DEBUG_LAYERS, int.class);
|
||||
sGlobalSettingToTypeMap.put(Settings.Global.GPU_DEBUG_APP, String.class);
|
||||
sGlobalSettingToTypeMap.put(Settings.Global.GPU_DEBUG_LAYERS, String.class);
|
||||
|
||||
Reference in New Issue
Block a user