Merge "Revert "Revert "Load native GLES driver when specified.""" into udc-qpr-dev
This commit is contained in:
@@ -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);
|
||||||
|
|
||||||
|
|||||||
@@ -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)},
|
||||||
|
|||||||
Reference in New Issue
Block a user