Loading core/java/android/os/GraphicsEnvironment.java +42 −26 Original line number Diff line number Diff line Loading @@ -112,9 +112,17 @@ public class GraphicsEnvironment { private static final int ANGLE_GL_DRIVER_ALL_ANGLE_OFF = 0; // Values for ANGLE_GL_DRIVER_SELECTION_VALUES 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_NATIVE = "native"; private enum AngleDriverChoice { DEFAULT("default"), ANGLE("angle"), NATIVE("native"); public final String choice; AngleDriverChoice(String choice) { this.choice = choice; } } private static final String PROPERTY_RO_ANGLE_SUPPORTED = "ro.gfx.angle.supported"; Loading Loading @@ -195,15 +203,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 AngleDriverChoice queryAngleChoice(Context context, Bundle coreSettings, String packageName) { if (TextUtils.isEmpty(packageName)) { Log.v(TAG, "No package name specified; use the system driver"); return false; return AngleDriverChoice.DEFAULT; } return shouldUseAngleInternal(context, coreSettings, packageName); return queryAngleChoiceInternal(context, coreSettings, packageName); } private int getVulkanVersion(PackageManager pm) { Loading Loading @@ -424,10 +433,11 @@ public class GraphicsEnvironment { * forces a choice; * 3) Use ANGLE if isAngleEnabledByGameMode() returns true; */ private boolean shouldUseAngleInternal(Context context, Bundle bundle, String packageName) { private AngleDriverChoice queryAngleChoiceInternal(Context context, Bundle bundle, String packageName) { // Make sure we have a good package name if (TextUtils.isEmpty(packageName)) { return false; return AngleDriverChoice.DEFAULT; } // Check the semi-global switch (i.e. once system has booted enough) for whether ANGLE Loading @@ -442,7 +452,7 @@ public class GraphicsEnvironment { } if (allUseAngle == ANGLE_GL_DRIVER_ALL_ANGLE_ON) { Log.v(TAG, "Turn on ANGLE for all applications."); return true; return AngleDriverChoice.ANGLE; } // Get the per-application settings lists Loading @@ -465,7 +475,7 @@ public class GraphicsEnvironment { + optInPackages.size() + ", " + "number of values: " + optInValues.size()); return mEnabledByGameMode; return mEnabledByGameMode ? AngleDriverChoice.ANGLE : AngleDriverChoice.DEFAULT; } // See if this application is listed in the per-application settings list Loading @@ -473,7 +483,7 @@ public class GraphicsEnvironment { if (pkgIndex < 0) { Log.v(TAG, packageName + " is not listed in per-application setting"); return mEnabledByGameMode; return mEnabledByGameMode ? AngleDriverChoice.ANGLE : AngleDriverChoice.DEFAULT; } mAngleOptInIndex = pkgIndex; Loading @@ -483,14 +493,14 @@ public class GraphicsEnvironment { Log.v(TAG, "ANGLE Developer option for '" + packageName + "' " + "set to: '" + optInValue + "'"); if (optInValue.equals(ANGLE_GL_DRIVER_CHOICE_ANGLE)) { return true; } else if (optInValue.equals(ANGLE_GL_DRIVER_CHOICE_NATIVE)) { return false; if (optInValue.equals(AngleDriverChoice.ANGLE.choice)) { return AngleDriverChoice.ANGLE; } else if (optInValue.equals(AngleDriverChoice.NATIVE.choice)) { return AngleDriverChoice.NATIVE; } else { // The user either chose default or an invalid value; go with the default driver or what // the game mode indicates return mEnabledByGameMode; return mEnabledByGameMode ? AngleDriverChoice.ANGLE : AngleDriverChoice.DEFAULT; } } Loading Loading @@ -558,7 +568,13 @@ public class GraphicsEnvironment { private boolean setupAngle(Context context, Bundle bundle, PackageManager packageManager, String packageName) { if (!shouldUseAngle(context, bundle, packageName)) { final AngleDriverChoice angleDriverChoice = queryAngleChoice(context, bundle, packageName); if (angleDriverChoice == AngleDriverChoice.DEFAULT) { return false; } if (queryAngleChoice(context, bundle, packageName) == AngleDriverChoice.NATIVE) { nativeSetAngleInfo("", true, packageName, null); return false; } Loading Loading @@ -627,10 +643,10 @@ public class GraphicsEnvironment { Log.d(TAG, "ANGLE package libs: " + paths); } // If we make it to here, ANGLE will be used. Call setAngleInfo() with the package name, // and features to use. // If we make it to here, ANGLE apk will be used. Call nativeSetAngleInfo() with the // application package name and ANGLE features to use. final String[] features = getAngleEglFeatures(context, bundle); setAngleInfo(paths, false, packageName, features); nativeSetAngleInfo(paths, false, packageName, features); return true; } Loading @@ -652,10 +668,10 @@ public class GraphicsEnvironment { return false; } // If we make it to here, ANGLE will be used. Call setAngleInfo() with the package name, // and features to use. // If we make it to here, system ANGLE will be used. Call nativeSetAngleInfo() with // the application package name and ANGLE features to use. final String[] features = getAngleEglFeatures(context, bundle); setAngleInfo("", true, packageName, features); nativeSetAngleInfo("system", false, packageName, features); return true; } Loading Loading @@ -936,8 +952,8 @@ public class GraphicsEnvironment { private static native void setDriverPathAndSphalLibraries(String path, String sphalLibraries); private static native void setGpuStats(String driverPackageName, String driverVersionName, long driverVersionCode, long driverBuildTime, String appPackageName, int vulkanVersion); private static native void setAngleInfo(String path, boolean useSystemAngle, String packageName, String[] features); private static native void nativeSetAngleInfo(String path, boolean useNativeDriver, String packageName, String[] features); private static native boolean setInjectLayersPrSetDumpable(); private static native void nativeToggleAngleAsSystemDriver(boolean enabled); Loading core/jni/android_os_GraphicsEnvironment.cpp +3 −3 Original line number Diff line number Diff line Loading @@ -50,7 +50,7 @@ void setGpuStats_native(JNIEnv* env, jobject clazz, jstring driverPackageName, 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) { ScopedUtfChars pathChars(env, path); ScopedUtfChars packageNameChars(env, packageName); Loading @@ -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); } Loading Loading @@ -118,7 +118,7 @@ const JNINativeMethod g_methods[] = { reinterpret_cast<void*>(setGpuStats_native)}, {"setInjectLayersPrSetDumpable", "()Z", 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)}, {"setLayerPaths", "(Ljava/lang/ClassLoader;Ljava/lang/String;)V", reinterpret_cast<void*>(setLayerPaths_native)}, Loading Loading
core/java/android/os/GraphicsEnvironment.java +42 −26 Original line number Diff line number Diff line Loading @@ -112,9 +112,17 @@ public class GraphicsEnvironment { private static final int ANGLE_GL_DRIVER_ALL_ANGLE_OFF = 0; // Values for ANGLE_GL_DRIVER_SELECTION_VALUES 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_NATIVE = "native"; private enum AngleDriverChoice { DEFAULT("default"), ANGLE("angle"), NATIVE("native"); public final String choice; AngleDriverChoice(String choice) { this.choice = choice; } } private static final String PROPERTY_RO_ANGLE_SUPPORTED = "ro.gfx.angle.supported"; Loading Loading @@ -195,15 +203,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 AngleDriverChoice queryAngleChoice(Context context, Bundle coreSettings, String packageName) { if (TextUtils.isEmpty(packageName)) { Log.v(TAG, "No package name specified; use the system driver"); return false; return AngleDriverChoice.DEFAULT; } return shouldUseAngleInternal(context, coreSettings, packageName); return queryAngleChoiceInternal(context, coreSettings, packageName); } private int getVulkanVersion(PackageManager pm) { Loading Loading @@ -424,10 +433,11 @@ public class GraphicsEnvironment { * forces a choice; * 3) Use ANGLE if isAngleEnabledByGameMode() returns true; */ private boolean shouldUseAngleInternal(Context context, Bundle bundle, String packageName) { private AngleDriverChoice queryAngleChoiceInternal(Context context, Bundle bundle, String packageName) { // Make sure we have a good package name if (TextUtils.isEmpty(packageName)) { return false; return AngleDriverChoice.DEFAULT; } // Check the semi-global switch (i.e. once system has booted enough) for whether ANGLE Loading @@ -442,7 +452,7 @@ public class GraphicsEnvironment { } if (allUseAngle == ANGLE_GL_DRIVER_ALL_ANGLE_ON) { Log.v(TAG, "Turn on ANGLE for all applications."); return true; return AngleDriverChoice.ANGLE; } // Get the per-application settings lists Loading @@ -465,7 +475,7 @@ public class GraphicsEnvironment { + optInPackages.size() + ", " + "number of values: " + optInValues.size()); return mEnabledByGameMode; return mEnabledByGameMode ? AngleDriverChoice.ANGLE : AngleDriverChoice.DEFAULT; } // See if this application is listed in the per-application settings list Loading @@ -473,7 +483,7 @@ public class GraphicsEnvironment { if (pkgIndex < 0) { Log.v(TAG, packageName + " is not listed in per-application setting"); return mEnabledByGameMode; return mEnabledByGameMode ? AngleDriverChoice.ANGLE : AngleDriverChoice.DEFAULT; } mAngleOptInIndex = pkgIndex; Loading @@ -483,14 +493,14 @@ public class GraphicsEnvironment { Log.v(TAG, "ANGLE Developer option for '" + packageName + "' " + "set to: '" + optInValue + "'"); if (optInValue.equals(ANGLE_GL_DRIVER_CHOICE_ANGLE)) { return true; } else if (optInValue.equals(ANGLE_GL_DRIVER_CHOICE_NATIVE)) { return false; if (optInValue.equals(AngleDriverChoice.ANGLE.choice)) { return AngleDriverChoice.ANGLE; } else if (optInValue.equals(AngleDriverChoice.NATIVE.choice)) { return AngleDriverChoice.NATIVE; } else { // The user either chose default or an invalid value; go with the default driver or what // the game mode indicates return mEnabledByGameMode; return mEnabledByGameMode ? AngleDriverChoice.ANGLE : AngleDriverChoice.DEFAULT; } } Loading Loading @@ -558,7 +568,13 @@ public class GraphicsEnvironment { private boolean setupAngle(Context context, Bundle bundle, PackageManager packageManager, String packageName) { if (!shouldUseAngle(context, bundle, packageName)) { final AngleDriverChoice angleDriverChoice = queryAngleChoice(context, bundle, packageName); if (angleDriverChoice == AngleDriverChoice.DEFAULT) { return false; } if (queryAngleChoice(context, bundle, packageName) == AngleDriverChoice.NATIVE) { nativeSetAngleInfo("", true, packageName, null); return false; } Loading Loading @@ -627,10 +643,10 @@ public class GraphicsEnvironment { Log.d(TAG, "ANGLE package libs: " + paths); } // If we make it to here, ANGLE will be used. Call setAngleInfo() with the package name, // and features to use. // If we make it to here, ANGLE apk will be used. Call nativeSetAngleInfo() with the // application package name and ANGLE features to use. final String[] features = getAngleEglFeatures(context, bundle); setAngleInfo(paths, false, packageName, features); nativeSetAngleInfo(paths, false, packageName, features); return true; } Loading @@ -652,10 +668,10 @@ public class GraphicsEnvironment { return false; } // If we make it to here, ANGLE will be used. Call setAngleInfo() with the package name, // and features to use. // If we make it to here, system ANGLE will be used. Call nativeSetAngleInfo() with // the application package name and ANGLE features to use. final String[] features = getAngleEglFeatures(context, bundle); setAngleInfo("", true, packageName, features); nativeSetAngleInfo("system", false, packageName, features); return true; } Loading Loading @@ -936,8 +952,8 @@ public class GraphicsEnvironment { private static native void setDriverPathAndSphalLibraries(String path, String sphalLibraries); private static native void setGpuStats(String driverPackageName, String driverVersionName, long driverVersionCode, long driverBuildTime, String appPackageName, int vulkanVersion); private static native void setAngleInfo(String path, boolean useSystemAngle, String packageName, String[] features); private static native void nativeSetAngleInfo(String path, boolean useNativeDriver, String packageName, String[] features); private static native boolean setInjectLayersPrSetDumpable(); private static native void nativeToggleAngleAsSystemDriver(boolean enabled); Loading
core/jni/android_os_GraphicsEnvironment.cpp +3 −3 Original line number Diff line number Diff line Loading @@ -50,7 +50,7 @@ void setGpuStats_native(JNIEnv* env, jobject clazz, jstring driverPackageName, 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) { ScopedUtfChars pathChars(env, path); ScopedUtfChars packageNameChars(env, packageName); Loading @@ -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); } Loading Loading @@ -118,7 +118,7 @@ const JNINativeMethod g_methods[] = { reinterpret_cast<void*>(setGpuStats_native)}, {"setInjectLayersPrSetDumpable", "()Z", 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)}, {"setLayerPaths", "(Ljava/lang/ClassLoader;Ljava/lang/String;)V", reinterpret_cast<void*>(setLayerPaths_native)}, Loading