summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author TreeHugger Robot <treehugger-gerrit@google.com> 2018-10-01 15:46:51 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2018-10-01 15:46:51 +0000
commit1ec3af056e0d993bcb869cf10635d527a692593b (patch)
tree3e309e1490f91ed6e708adae91c547f45f66eefa
parentacdc1133d69e766839420cecebe1a65feee84d20 (diff)
parent841c3d9baa6e050c5ba349b92534d41ab9d4ae83 (diff)
Merge "Allow specifying ANGLE in manifest via meta-data"
-rw-r--r--core/java/android/os/GraphicsEnvironment.java40
-rw-r--r--core/jni/android_os_GraphicsEnvironment.cpp8
2 files changed, 38 insertions, 10 deletions
diff --git a/core/java/android/os/GraphicsEnvironment.java b/core/java/android/os/GraphicsEnvironment.java
index bc85d4230f3a..54be6393e651 100644
--- a/core/java/android/os/GraphicsEnvironment.java
+++ b/core/java/android/os/GraphicsEnvironment.java
@@ -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;
@@ -123,7 +124,6 @@ public class GraphicsEnvironment {
}
}
}
-
}
// Include the app's lib directory in all cases
@@ -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);
@@ -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);
}
/**
@@ -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);
}
diff --git a/core/jni/android_os_GraphicsEnvironment.cpp b/core/jni/android_os_GraphicsEnvironment.cpp
index e1411a53fcb3..b70485d9a0ea 100644
--- a/core/jni/android_os_GraphicsEnvironment.cpp
+++ b/core/jni/android_os_GraphicsEnvironment.cpp
@@ -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) {
@@ -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) },
};