Merge "Revert "Revert "Load native GLES driver when specified.""" into udc-qpr-dev am: a31cd222ca

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/24050140

Change-Id: Ief219d2997d6c78c13ecc07bcafc65435e5421e2
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Peiyong Lin
2023-07-26 18:06:56 +00:00
committed by Automerger Merge Worker
2 changed files with 35 additions and 25 deletions

View File

@@ -115,6 +115,7 @@ public class GraphicsEnvironment {
private static final String ANGLE_GL_DRIVER_CHOICE_DEFAULT = "default"; private static final String ANGLE_GL_DRIVER_CHOICE_DEFAULT = "default";
private static final String ANGLE_GL_DRIVER_CHOICE_ANGLE = "angle"; private static final String ANGLE_GL_DRIVER_CHOICE_ANGLE = "angle";
private static final String ANGLE_GL_DRIVER_CHOICE_NATIVE = "native"; private static final String ANGLE_GL_DRIVER_CHOICE_NATIVE = "native";
private static final String SYSTEM_ANGLE_STRING = "system";
private static final String PROPERTY_RO_ANGLE_SUPPORTED = "ro.gfx.angle.supported"; private static final String PROPERTY_RO_ANGLE_SUPPORTED = "ro.gfx.angle.supported";
@@ -195,15 +196,16 @@ public class GraphicsEnvironment {
} }
/** /**
* Query to determine if ANGLE should be used * Query to determine the ANGLE driver choice.
*/ */
private boolean shouldUseAngle(Context context, Bundle coreSettings, String packageName) { private String queryAngleChoice(Context context, Bundle coreSettings,
String packageName) {
if (TextUtils.isEmpty(packageName)) { if (TextUtils.isEmpty(packageName)) {
Log.v(TAG, "No package name specified; use the system driver"); Log.v(TAG, "No package name specified; use the system driver");
return false; return ANGLE_GL_DRIVER_CHOICE_DEFAULT;
} }
return shouldUseAngleInternal(context, coreSettings, packageName); return queryAngleChoiceInternal(context, coreSettings, packageName);
} }
private int getVulkanVersion(PackageManager pm) { private int getVulkanVersion(PackageManager pm) {
@@ -424,10 +426,11 @@ public class GraphicsEnvironment {
* forces a choice; * forces a choice;
* 3) Use ANGLE if isAngleEnabledByGameMode() returns true; * 3) Use ANGLE if isAngleEnabledByGameMode() returns true;
*/ */
private boolean shouldUseAngleInternal(Context context, Bundle bundle, String packageName) { private String queryAngleChoiceInternal(Context context, Bundle bundle,
String packageName) {
// Make sure we have a good package name // Make sure we have a good package name
if (TextUtils.isEmpty(packageName)) { if (TextUtils.isEmpty(packageName)) {
return false; return ANGLE_GL_DRIVER_CHOICE_DEFAULT;
} }
// Check the semi-global switch (i.e. once system has booted enough) for whether ANGLE // Check the semi-global switch (i.e. once system has booted enough) for whether ANGLE
@@ -442,7 +445,7 @@ public class GraphicsEnvironment {
} }
if (allUseAngle == ANGLE_GL_DRIVER_ALL_ANGLE_ON) { if (allUseAngle == ANGLE_GL_DRIVER_ALL_ANGLE_ON) {
Log.v(TAG, "Turn on ANGLE for all applications."); Log.v(TAG, "Turn on ANGLE for all applications.");
return true; return ANGLE_GL_DRIVER_CHOICE_ANGLE;
} }
// Get the per-application settings lists // Get the per-application settings lists
@@ -465,7 +468,8 @@ public class GraphicsEnvironment {
+ optInPackages.size() + ", " + optInPackages.size() + ", "
+ "number of values: " + "number of values: "
+ optInValues.size()); + optInValues.size());
return mEnabledByGameMode; return mEnabledByGameMode ? ANGLE_GL_DRIVER_CHOICE_ANGLE
: ANGLE_GL_DRIVER_CHOICE_DEFAULT;
} }
// See if this application is listed in the per-application settings list // See if this application is listed in the per-application settings list
@@ -473,7 +477,8 @@ public class GraphicsEnvironment {
if (pkgIndex < 0) { if (pkgIndex < 0) {
Log.v(TAG, packageName + " is not listed in per-application setting"); Log.v(TAG, packageName + " is not listed in per-application setting");
return mEnabledByGameMode; return mEnabledByGameMode ? ANGLE_GL_DRIVER_CHOICE_ANGLE
: ANGLE_GL_DRIVER_CHOICE_DEFAULT;
} }
mAngleOptInIndex = pkgIndex; mAngleOptInIndex = pkgIndex;
@@ -484,13 +489,14 @@ public class GraphicsEnvironment {
"ANGLE Developer option for '" + packageName + "' " "ANGLE Developer option for '" + packageName + "' "
+ "set to: '" + optInValue + "'"); + "set to: '" + optInValue + "'");
if (optInValue.equals(ANGLE_GL_DRIVER_CHOICE_ANGLE)) { if (optInValue.equals(ANGLE_GL_DRIVER_CHOICE_ANGLE)) {
return true; return ANGLE_GL_DRIVER_CHOICE_ANGLE;
} else if (optInValue.equals(ANGLE_GL_DRIVER_CHOICE_NATIVE)) { } else if (optInValue.equals(ANGLE_GL_DRIVER_CHOICE_NATIVE)) {
return false; return ANGLE_GL_DRIVER_CHOICE_NATIVE;
} else { } else {
// The user either chose default or an invalid value; go with the default driver or what // The user either chose default or an invalid value; go with the default driver or what
// the game mode indicates // the game mode indicates
return mEnabledByGameMode; return mEnabledByGameMode ? ANGLE_GL_DRIVER_CHOICE_ANGLE
: ANGLE_GL_DRIVER_CHOICE_DEFAULT;
} }
} }
@@ -557,8 +563,12 @@ public class GraphicsEnvironment {
*/ */
private boolean setupAngle(Context context, Bundle bundle, PackageManager packageManager, private boolean setupAngle(Context context, Bundle bundle, PackageManager packageManager,
String packageName) { String packageName) {
final String angleChoice = queryAngleChoice(context, bundle, packageName);
if (!shouldUseAngle(context, bundle, packageName)) { if (angleChoice.equals(ANGLE_GL_DRIVER_CHOICE_DEFAULT)) {
return false;
}
if (angleChoice.equals(ANGLE_GL_DRIVER_CHOICE_NATIVE)) {
nativeSetAngleInfo("", true, packageName, null);
return false; return false;
} }
@@ -627,10 +637,10 @@ public class GraphicsEnvironment {
Log.d(TAG, "ANGLE package libs: " + paths); Log.d(TAG, "ANGLE package libs: " + paths);
} }
// If we make it to here, ANGLE will be used. Call setAngleInfo() with the package name, // If we make it to here, ANGLE apk will be used. Call nativeSetAngleInfo() with the
// and features to use. // application package name and ANGLE features to use.
final String[] features = getAngleEglFeatures(context, bundle); final String[] features = getAngleEglFeatures(context, bundle);
setAngleInfo(paths, false, packageName, features); nativeSetAngleInfo(paths, false, packageName, features);
return true; return true;
} }
@@ -652,10 +662,10 @@ public class GraphicsEnvironment {
return false; return false;
} }
// If we make it to here, ANGLE will be used. Call setAngleInfo() with the package name, // If we make it to here, system ANGLE will be used. Call nativeSetAngleInfo() with
// and features to use. // the application package name and ANGLE features to use.
final String[] features = getAngleEglFeatures(context, bundle); final String[] features = getAngleEglFeatures(context, bundle);
setAngleInfo("", true, packageName, features); nativeSetAngleInfo(SYSTEM_ANGLE_STRING, false, packageName, features);
return true; return true;
} }
@@ -936,8 +946,8 @@ public class GraphicsEnvironment {
private static native void setDriverPathAndSphalLibraries(String path, String sphalLibraries); private static native void setDriverPathAndSphalLibraries(String path, String sphalLibraries);
private static native void setGpuStats(String driverPackageName, String driverVersionName, private static native void setGpuStats(String driverPackageName, String driverVersionName,
long driverVersionCode, long driverBuildTime, String appPackageName, int vulkanVersion); long driverVersionCode, long driverBuildTime, String appPackageName, int vulkanVersion);
private static native void setAngleInfo(String path, boolean useSystemAngle, String packageName, private static native void nativeSetAngleInfo(String path, boolean useNativeDriver,
String[] features); String packageName, String[] features);
private static native boolean setInjectLayersPrSetDumpable(); private static native boolean setInjectLayersPrSetDumpable();
private static native void nativeToggleAngleAsSystemDriver(boolean enabled); private static native void nativeToggleAngleAsSystemDriver(boolean enabled);

View File

@@ -50,7 +50,7 @@ void setGpuStats_native(JNIEnv* env, jobject clazz, jstring driverPackageName,
appPackageNameChars.c_str(), vulkanVersion); appPackageNameChars.c_str(), vulkanVersion);
} }
void setAngleInfo_native(JNIEnv* env, jobject clazz, jstring path, jboolean useSystemAngle, void setAngleInfo_native(JNIEnv* env, jobject clazz, jstring path, jboolean useNativeDriver,
jstring packageName, jobjectArray featuresObj) { jstring packageName, jobjectArray featuresObj) {
ScopedUtfChars pathChars(env, path); ScopedUtfChars pathChars(env, path);
ScopedUtfChars packageNameChars(env, packageName); ScopedUtfChars packageNameChars(env, packageName);
@@ -73,7 +73,7 @@ void setAngleInfo_native(JNIEnv* env, jobject clazz, jstring path, jboolean useS
} }
} }
android::GraphicsEnv::getInstance().setAngleInfo(pathChars.c_str(), useSystemAngle, android::GraphicsEnv::getInstance().setAngleInfo(pathChars.c_str(), useNativeDriver,
packageNameChars.c_str(), features); packageNameChars.c_str(), features);
} }
@@ -118,7 +118,7 @@ const JNINativeMethod g_methods[] = {
reinterpret_cast<void*>(setGpuStats_native)}, reinterpret_cast<void*>(setGpuStats_native)},
{"setInjectLayersPrSetDumpable", "()Z", {"setInjectLayersPrSetDumpable", "()Z",
reinterpret_cast<void*>(setInjectLayersPrSetDumpable_native)}, reinterpret_cast<void*>(setInjectLayersPrSetDumpable_native)},
{"setAngleInfo", "(Ljava/lang/String;ZLjava/lang/String;[Ljava/lang/String;)V", {"nativeSetAngleInfo", "(Ljava/lang/String;ZLjava/lang/String;[Ljava/lang/String;)V",
reinterpret_cast<void*>(setAngleInfo_native)}, reinterpret_cast<void*>(setAngleInfo_native)},
{"setLayerPaths", "(Ljava/lang/ClassLoader;Ljava/lang/String;)V", {"setLayerPaths", "(Ljava/lang/ClassLoader;Ljava/lang/String;)V",
reinterpret_cast<void*>(setLayerPaths_native)}, reinterpret_cast<void*>(setLayerPaths_native)},