Loading core/java/android/os/GraphicsEnvironment.java +33 −7 Original line number Diff line number Diff line Loading @@ -45,6 +45,7 @@ public class GraphicsEnvironment { private static final String TAG = "GraphicsEnvironment"; private static final String PROPERTY_GFX_DRIVER = "ro.gfx.driver.0"; private static final String ANGLE_PACKAGE_NAME = "com.android.angle"; private static final String GLES_MODE_METADATA_KEY = "com.android.angle.GLES_MODE"; private ClassLoader mClassLoader; private String mLayerPath; Loading Loading @@ -123,7 +124,6 @@ public class GraphicsEnvironment { } } } } // Include the app's lib directory in all cases Loading @@ -143,19 +143,44 @@ public class GraphicsEnvironment { String packageName = context.getPackageName(); boolean optIn = false; boolean devOptIn = false; if ((angleEnabledApp != null && packageName != null) && (!angleEnabledApp.isEmpty() && !packageName.isEmpty()) && angleEnabledApp.equals(packageName)) { if (DEBUG) Log.v(TAG, packageName + " opted in for ANGLE via Developer Setting"); optIn = true; devOptIn = true; } ApplicationInfo angleInfo; ApplicationInfo appInfo; try { appInfo = context.getPackageManager().getApplicationInfo(packageName, PackageManager.GET_META_DATA); } catch (PackageManager.NameNotFoundException e) { Log.w(TAG, "Failed to get info about current application: " + packageName); return; } String appPref = "dontcare"; final BaseBundle metadata = appInfo.metaData; if (metadata != null) { final String glesMode = metadata.getString(GLES_MODE_METADATA_KEY); if (glesMode != null) { if (glesMode.equals("angle")) { appPref = "angle"; if (DEBUG) Log.v(TAG, packageName + " opted for ANGLE via AndroidManifest"); } else if (glesMode.equals("native")) { appPref = "native"; if (DEBUG) Log.v(TAG, packageName + " opted for NATIVE via AndroidManifest"); } else { Log.w(TAG, "Unrecognized GLES_MODE (\"" + glesMode + "\") for " + packageName + ". Supported values are \"angle\" or \"native\""); } } } ApplicationInfo angleInfo; try { angleInfo = context.getPackageManager().getApplicationInfo(ANGLE_PACKAGE_NAME, PackageManager.MATCH_SYSTEM_ONLY); Loading @@ -178,7 +203,7 @@ public class GraphicsEnvironment { if (DEBUG) Log.v(TAG, "ANGLE package libs: " + paths); // Further opt-in logic is handled in native, so pass relevant info down setAngleInfo(paths, packageName, optIn); setAngleInfo(paths, packageName, appPref, devOptIn); } /** Loading Loading @@ -269,5 +294,6 @@ public class GraphicsEnvironment { private static native void setLayerPaths(ClassLoader classLoader, String layerPaths); private static native void setDebugLayers(String layers); private static native void setDriverPath(String path); private static native void setAngleInfo(String path, String appPackage, boolean optIn); private static native void setAngleInfo(String path, String appPackage, String appPref, boolean devOptIn); } core/jni/android_os_GraphicsEnvironment.cpp +5 −3 Original line number Diff line number Diff line Loading @@ -28,10 +28,12 @@ void setDriverPath(JNIEnv* env, jobject clazz, jstring path) { android::GraphicsEnv::getInstance().setDriverPath(pathChars.c_str()); } void setAngleInfo_native(JNIEnv* env, jobject clazz, jstring path, jstring appName, jboolean optIn) { void setAngleInfo_native(JNIEnv* env, jobject clazz, jstring path, jstring appName, jstring appPref, jboolean devOptIn) { ScopedUtfChars pathChars(env, path); ScopedUtfChars appNameChars(env, appName); android::GraphicsEnv::getInstance().setAngleInfo(pathChars.c_str(), appNameChars.c_str(), optIn); ScopedUtfChars appPrefChars(env, appPref); android::GraphicsEnv::getInstance().setAngleInfo(pathChars.c_str(), appNameChars.c_str(), appPrefChars.c_str(), devOptIn); } void setLayerPaths_native(JNIEnv* env, jobject clazz, jobject classLoader, jstring layerPaths) { Loading @@ -50,7 +52,7 @@ void setDebugLayers_native(JNIEnv* env, jobject clazz, jstring layers) { const JNINativeMethod g_methods[] = { { "setDriverPath", "(Ljava/lang/String;)V", reinterpret_cast<void*>(setDriverPath) }, { "setAngleInfo", "(Ljava/lang/String;Ljava/lang/String;Z)V", reinterpret_cast<void*>(setAngleInfo_native) }, { "setAngleInfo", "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Z)V", reinterpret_cast<void*>(setAngleInfo_native) }, { "setLayerPaths", "(Ljava/lang/ClassLoader;Ljava/lang/String;)V", reinterpret_cast<void*>(setLayerPaths_native) }, { "setDebugLayers", "(Ljava/lang/String;)V", reinterpret_cast<void*>(setDebugLayers_native) }, }; Loading Loading
core/java/android/os/GraphicsEnvironment.java +33 −7 Original line number Diff line number Diff line Loading @@ -45,6 +45,7 @@ public class GraphicsEnvironment { private static final String TAG = "GraphicsEnvironment"; private static final String PROPERTY_GFX_DRIVER = "ro.gfx.driver.0"; private static final String ANGLE_PACKAGE_NAME = "com.android.angle"; private static final String GLES_MODE_METADATA_KEY = "com.android.angle.GLES_MODE"; private ClassLoader mClassLoader; private String mLayerPath; Loading Loading @@ -123,7 +124,6 @@ public class GraphicsEnvironment { } } } } // Include the app's lib directory in all cases Loading @@ -143,19 +143,44 @@ public class GraphicsEnvironment { String packageName = context.getPackageName(); boolean optIn = false; boolean devOptIn = false; if ((angleEnabledApp != null && packageName != null) && (!angleEnabledApp.isEmpty() && !packageName.isEmpty()) && angleEnabledApp.equals(packageName)) { if (DEBUG) Log.v(TAG, packageName + " opted in for ANGLE via Developer Setting"); optIn = true; devOptIn = true; } ApplicationInfo angleInfo; ApplicationInfo appInfo; try { appInfo = context.getPackageManager().getApplicationInfo(packageName, PackageManager.GET_META_DATA); } catch (PackageManager.NameNotFoundException e) { Log.w(TAG, "Failed to get info about current application: " + packageName); return; } String appPref = "dontcare"; final BaseBundle metadata = appInfo.metaData; if (metadata != null) { final String glesMode = metadata.getString(GLES_MODE_METADATA_KEY); if (glesMode != null) { if (glesMode.equals("angle")) { appPref = "angle"; if (DEBUG) Log.v(TAG, packageName + " opted for ANGLE via AndroidManifest"); } else if (glesMode.equals("native")) { appPref = "native"; if (DEBUG) Log.v(TAG, packageName + " opted for NATIVE via AndroidManifest"); } else { Log.w(TAG, "Unrecognized GLES_MODE (\"" + glesMode + "\") for " + packageName + ". Supported values are \"angle\" or \"native\""); } } } ApplicationInfo angleInfo; try { angleInfo = context.getPackageManager().getApplicationInfo(ANGLE_PACKAGE_NAME, PackageManager.MATCH_SYSTEM_ONLY); Loading @@ -178,7 +203,7 @@ public class GraphicsEnvironment { if (DEBUG) Log.v(TAG, "ANGLE package libs: " + paths); // Further opt-in logic is handled in native, so pass relevant info down setAngleInfo(paths, packageName, optIn); setAngleInfo(paths, packageName, appPref, devOptIn); } /** Loading Loading @@ -269,5 +294,6 @@ public class GraphicsEnvironment { private static native void setLayerPaths(ClassLoader classLoader, String layerPaths); private static native void setDebugLayers(String layers); private static native void setDriverPath(String path); private static native void setAngleInfo(String path, String appPackage, boolean optIn); private static native void setAngleInfo(String path, String appPackage, String appPref, boolean devOptIn); }
core/jni/android_os_GraphicsEnvironment.cpp +5 −3 Original line number Diff line number Diff line Loading @@ -28,10 +28,12 @@ void setDriverPath(JNIEnv* env, jobject clazz, jstring path) { android::GraphicsEnv::getInstance().setDriverPath(pathChars.c_str()); } void setAngleInfo_native(JNIEnv* env, jobject clazz, jstring path, jstring appName, jboolean optIn) { void setAngleInfo_native(JNIEnv* env, jobject clazz, jstring path, jstring appName, jstring appPref, jboolean devOptIn) { ScopedUtfChars pathChars(env, path); ScopedUtfChars appNameChars(env, appName); android::GraphicsEnv::getInstance().setAngleInfo(pathChars.c_str(), appNameChars.c_str(), optIn); ScopedUtfChars appPrefChars(env, appPref); android::GraphicsEnv::getInstance().setAngleInfo(pathChars.c_str(), appNameChars.c_str(), appPrefChars.c_str(), devOptIn); } void setLayerPaths_native(JNIEnv* env, jobject clazz, jobject classLoader, jstring layerPaths) { Loading @@ -50,7 +52,7 @@ void setDebugLayers_native(JNIEnv* env, jobject clazz, jstring layers) { const JNINativeMethod g_methods[] = { { "setDriverPath", "(Ljava/lang/String;)V", reinterpret_cast<void*>(setDriverPath) }, { "setAngleInfo", "(Ljava/lang/String;Ljava/lang/String;Z)V", reinterpret_cast<void*>(setAngleInfo_native) }, { "setAngleInfo", "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Z)V", reinterpret_cast<void*>(setAngleInfo_native) }, { "setLayerPaths", "(Ljava/lang/ClassLoader;Ljava/lang/String;)V", reinterpret_cast<void*>(setLayerPaths_native) }, { "setDebugLayers", "(Ljava/lang/String;)V", reinterpret_cast<void*>(setDebugLayers_native) }, }; Loading