Merge "Find and load ANGLE rules, pass to libEGL"
This commit is contained in:
committed by
Android (Google) Code Review
commit
fdd0229da8
@@ -19,6 +19,7 @@ package android.os;
|
||||
import android.content.Context;
|
||||
import android.content.pm.ApplicationInfo;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.content.res.AssetFileDescriptor;
|
||||
import android.content.res.AssetManager;
|
||||
import android.opengl.EGL14;
|
||||
import android.os.Build;
|
||||
@@ -30,6 +31,7 @@ import dalvik.system.VMRuntime;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.File;
|
||||
import java.io.FileDescriptor;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.InputStreamReader;
|
||||
@@ -54,6 +56,7 @@ public class GraphicsEnvironment {
|
||||
private static final String PROPERTY_GFX_DRIVER_WHITELIST = "ro.gfx.driver.whitelist.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 static final String ANGLE_RULES_FILE = "a4a_rules.json";
|
||||
|
||||
private ClassLoader mClassLoader;
|
||||
private String mLayerPath;
|
||||
@@ -250,8 +253,40 @@ public class GraphicsEnvironment {
|
||||
|
||||
if (DEBUG) Log.v(TAG, "ANGLE package libs: " + paths);
|
||||
|
||||
// Pass the rules file to loader for ANGLE decisions
|
||||
AssetManager angleAssets = null;
|
||||
try {
|
||||
angleAssets =
|
||||
context.getPackageManager().getResourcesForApplication(angleInfo).getAssets();
|
||||
} catch (PackageManager.NameNotFoundException e) {
|
||||
Log.w(TAG, "Failed to get AssetManager for '" + ANGLE_PACKAGE_NAME + "'");
|
||||
return;
|
||||
}
|
||||
|
||||
AssetFileDescriptor assetsFd = null;
|
||||
try {
|
||||
assetsFd = angleAssets.openFd(ANGLE_RULES_FILE);
|
||||
} catch (IOException e) {
|
||||
Log.w(TAG, "Failed to get AssetFileDescriptor for " + ANGLE_RULES_FILE + " from "
|
||||
+ "'" + ANGLE_PACKAGE_NAME + "'");
|
||||
return;
|
||||
}
|
||||
|
||||
FileDescriptor rulesFd = null;
|
||||
long rulesOffset = 0;
|
||||
long rulesLength = 0;
|
||||
if (assetsFd != null) {
|
||||
rulesFd = assetsFd.getFileDescriptor();
|
||||
rulesOffset = assetsFd.getStartOffset();
|
||||
rulesLength = assetsFd.getLength();
|
||||
} else {
|
||||
Log.w(TAG, "Failed to get file descriptor for " + ANGLE_RULES_FILE);
|
||||
return;
|
||||
}
|
||||
|
||||
// Further opt-in logic is handled in native, so pass relevant info down
|
||||
setAngleInfo(paths, packageName, appPref, devOptIn);
|
||||
setAngleInfo(paths, packageName, appPref, devOptIn,
|
||||
rulesFd, rulesOffset, rulesLength);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -391,5 +426,6 @@ public class GraphicsEnvironment {
|
||||
private static native void setDebugLayers(String layers);
|
||||
private static native void setDriverPath(String path);
|
||||
private static native void setAngleInfo(String path, String appPackage, String appPref,
|
||||
boolean devOptIn);
|
||||
boolean devOptIn, FileDescriptor rulesFd,
|
||||
long rulesOffset, long rulesLength);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user