GraphicsEnv: refactor to unify the debuggable logic
By default, PR_SET_DUMPABLE is 0 for zygote spawned apps, except in the
following circumstances:
1. ro.debuggable=1 (global debuggable enabled, i.e., userdebug or eng builds).
2. android:debuggable="true" in the manifest for an individual application.
3. An app which explicitly calls prctl(PR_SET_DUMPABLE, 1).
4. GraphicsEnv calls prctl(PR_SET_DUMPABLE, 1) in the presence of
<meta-data android:name="com.android.graphics.injectLayers.enable"
android:value="true"/>
in the application manifest.
So checking both ro.debuggable=1 and PR_GET_DUMPABLE is redundant.
Bug: 144186877
Test: CtsAngleIntegrationHostTestCases
Test: CtsRootlessGpuDebugHostTest
Change-Id: Ica49254df2c7c090808411935cdeb8efd4e3cb51
This commit is contained in:
@@ -176,13 +176,6 @@ public class GraphicsEnvironment {
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Check whether application is debuggable
|
|
||||||
*/
|
|
||||||
private static boolean isDebuggable(Context context) {
|
|
||||||
return (context.getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE) > 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Check whether application is has set the manifest metadata for layer injection.
|
* Check whether application is has set the manifest metadata for layer injection.
|
||||||
*/
|
*/
|
||||||
@@ -246,7 +239,7 @@ public class GraphicsEnvironment {
|
|||||||
// 2. ENABLE_GPU_DEBUG_LAYERS is true
|
// 2. ENABLE_GPU_DEBUG_LAYERS is true
|
||||||
// 3. Package name is equal to GPU_DEBUG_APP
|
// 3. Package name is equal to GPU_DEBUG_APP
|
||||||
|
|
||||||
if (isDebuggable(context) || (getCanLoadSystemLibraries() == 1) || canInjectLayers(ai)) {
|
if (isDebuggable() || canInjectLayers(ai)) {
|
||||||
|
|
||||||
final int enable = coreSettings.getInt(Settings.Global.ENABLE_GPU_DEBUG_LAYERS, 0);
|
final int enable = coreSettings.getInt(Settings.Global.ENABLE_GPU_DEBUG_LAYERS, 0);
|
||||||
|
|
||||||
@@ -441,9 +434,7 @@ public class GraphicsEnvironment {
|
|||||||
* Check for ANGLE debug package, but only for apps that can load them (dumpable)
|
* Check for ANGLE debug package, but only for apps that can load them (dumpable)
|
||||||
*/
|
*/
|
||||||
private String getAngleDebugPackage(Context context, Bundle coreSettings) {
|
private String getAngleDebugPackage(Context context, Bundle coreSettings) {
|
||||||
final boolean appIsDebuggable = isDebuggable(context);
|
if (isDebuggable()) {
|
||||||
final boolean deviceIsDebuggable = getCanLoadSystemLibraries() == 1;
|
|
||||||
if (appIsDebuggable || deviceIsDebuggable) {
|
|
||||||
String debugPackage;
|
String debugPackage;
|
||||||
|
|
||||||
if (coreSettings != null) {
|
if (coreSettings != null) {
|
||||||
@@ -478,12 +469,8 @@ public class GraphicsEnvironment {
|
|||||||
* - devices that are running a userdebug build (ro.debuggable) or can inject libraries for
|
* - devices that are running a userdebug build (ro.debuggable) or can inject libraries for
|
||||||
* debugging (PR_SET_DUMPABLE).
|
* debugging (PR_SET_DUMPABLE).
|
||||||
*/
|
*/
|
||||||
final boolean appIsDebuggable = isDebuggable(context);
|
if (!isDebuggable()) {
|
||||||
final boolean deviceIsDebuggable = getCanLoadSystemLibraries() == 1;
|
Log.v(TAG, "Skipping loading temporary rules file");
|
||||||
if (!(appIsDebuggable || deviceIsDebuggable)) {
|
|
||||||
Log.v(TAG, "Skipping loading temporary rules file: "
|
|
||||||
+ "appIsDebuggable = " + appIsDebuggable + ", "
|
|
||||||
+ "adbRootEnabled = " + deviceIsDebuggable);
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -742,7 +729,7 @@ public class GraphicsEnvironment {
|
|||||||
|
|
||||||
final boolean enablePrereleaseDriver =
|
final boolean enablePrereleaseDriver =
|
||||||
(ai.metaData != null && ai.metaData.getBoolean(METADATA_DEVELOPER_DRIVER_ENABLE))
|
(ai.metaData != null && ai.metaData.getBoolean(METADATA_DEVELOPER_DRIVER_ENABLE))
|
||||||
|| getCanLoadSystemLibraries() == 1;
|
|| isDebuggable();
|
||||||
|
|
||||||
// Priority for Game Driver settings global on confliction (Higher priority comes first):
|
// Priority for Game Driver settings global on confliction (Higher priority comes first):
|
||||||
// 1. GAME_DRIVER_ALL_APPS
|
// 1. GAME_DRIVER_ALL_APPS
|
||||||
@@ -918,7 +905,7 @@ public class GraphicsEnvironment {
|
|||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
private static native int getCanLoadSystemLibraries();
|
private static native boolean isDebuggable();
|
||||||
private static native void setLayerPaths(ClassLoader classLoader, String layerPaths);
|
private static native void setLayerPaths(ClassLoader classLoader, String layerPaths);
|
||||||
private static native void setDebugLayers(String layers);
|
private static native void setDebugLayers(String layers);
|
||||||
private static native void setDebugLayersGLES(String layers);
|
private static native void setDebugLayersGLES(String layers);
|
||||||
|
|||||||
@@ -23,8 +23,8 @@
|
|||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
|
|
||||||
int getCanLoadSystemLibraries_native() {
|
bool isDebuggable_native() {
|
||||||
return android::GraphicsEnv::getInstance().getCanLoadSystemLibraries();
|
return android::GraphicsEnv::getInstance().isDebuggable();
|
||||||
}
|
}
|
||||||
|
|
||||||
void setDriverPathAndSphalLibraries_native(JNIEnv* env, jobject clazz, jstring path,
|
void setDriverPathAndSphalLibraries_native(JNIEnv* env, jobject clazz, jstring path,
|
||||||
@@ -94,7 +94,7 @@ void hintActivityLaunch_native(JNIEnv* env, jobject clazz) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const JNINativeMethod g_methods[] = {
|
const JNINativeMethod g_methods[] = {
|
||||||
{ "getCanLoadSystemLibraries", "()I", reinterpret_cast<void*>(getCanLoadSystemLibraries_native) },
|
{ "isDebuggable", "()Z", reinterpret_cast<void*>(isDebuggable_native) },
|
||||||
{ "setDriverPathAndSphalLibraries", "(Ljava/lang/String;Ljava/lang/String;)V", reinterpret_cast<void*>(setDriverPathAndSphalLibraries_native) },
|
{ "setDriverPathAndSphalLibraries", "(Ljava/lang/String;Ljava/lang/String;)V", reinterpret_cast<void*>(setDriverPathAndSphalLibraries_native) },
|
||||||
{ "setGpuStats", "(Ljava/lang/String;Ljava/lang/String;JJLjava/lang/String;I)V", reinterpret_cast<void*>(setGpuStats_native) },
|
{ "setGpuStats", "(Ljava/lang/String;Ljava/lang/String;JJLjava/lang/String;I)V", reinterpret_cast<void*>(setGpuStats_native) },
|
||||||
{ "setInjectLayersPrSetDumpable", "()Z", reinterpret_cast<void*>(setInjectLayersPrSetDumpable_native) },
|
{ "setInjectLayersPrSetDumpable", "()Z", reinterpret_cast<void*>(setInjectLayersPrSetDumpable_native) },
|
||||||
|
|||||||
Reference in New Issue
Block a user