diff options
| author | Cody Northrop <cnorthrop@google.com> | 2018-10-16 18:54:42 +0000 |
|---|---|---|
| committer | Android (Google) Code Review <android-gerrit@google.com> | 2018-10-16 18:54:42 +0000 |
| commit | fba8e6342f6e00e2977869902c811117964a70e6 (patch) | |
| tree | 202c2e851673efd1b5fcef3f06e3a70fc49128e6 /core/java/android | |
| parent | e767fa2e136d72a3703b1117e73b16ae55afc96e (diff) | |
| parent | ebe6a56f80368ae168b8ee59e8a8458823c8476b (diff) | |
Merge "Revert "Revert "Rootless GPU Debug for GLES"""
Diffstat (limited to 'core/java/android')
| -rw-r--r-- | core/java/android/os/GraphicsEnvironment.java | 62 | ||||
| -rw-r--r-- | core/java/android/provider/Settings.java | 6 |
2 files changed, 58 insertions, 10 deletions
diff --git a/core/java/android/os/GraphicsEnvironment.java b/core/java/android/os/GraphicsEnvironment.java index 5f656207255a..df3aae2c901c 100644 --- a/core/java/android/os/GraphicsEnvironment.java +++ b/core/java/android/os/GraphicsEnvironment.java @@ -55,7 +55,7 @@ public class GraphicsEnvironment { * Set up GraphicsEnvironment */ public void setup(Context context, Bundle coreSettings) { - setupGpuLayers(context); + setupGpuLayers(context, coreSettings); setupAngle(context, coreSettings); chooseDriver(context); } @@ -81,27 +81,54 @@ public class GraphicsEnvironment { } /** + * Return the debug layer app's on-disk and in-APK lib directories + */ + private static String getDebugLayerAppPaths(Context context, String app) { + ApplicationInfo appInfo; + try { + appInfo = context.getPackageManager().getApplicationInfo( + app, PackageManager.MATCH_ALL); + } catch (PackageManager.NameNotFoundException e) { + Log.w(TAG, "Debug layer app '" + app + "' not installed"); + + return null; + } + + String abi = chooseAbi(appInfo); + + StringBuilder sb = new StringBuilder(); + sb.append(appInfo.nativeLibraryDir) + .append(File.pathSeparator); + sb.append(appInfo.sourceDir) + .append("!/lib/") + .append(abi); + String paths = sb.toString(); + + if (DEBUG) Log.v(TAG, "Debug layer app libs: " + paths); + + return paths; + } + + /** * Set up layer search paths for all apps * If debuggable, check for additional debug settings */ - private void setupGpuLayers(Context context) { + private void setupGpuLayers(Context context, Bundle coreSettings) { String layerPaths = ""; // Only enable additional debug functionality if the following conditions are met: - // 1. App is debuggable + // 1. App is debuggable or device is rooted // 2. ENABLE_GPU_DEBUG_LAYERS is true // 3. Package name is equal to GPU_DEBUG_APP - if (isDebuggable(context)) { + if (isDebuggable(context) || (getCanLoadSystemLibraries() == 1)) { - int enable = Settings.Global.getInt(context.getContentResolver(), - Settings.Global.ENABLE_GPU_DEBUG_LAYERS, 0); + int enable = coreSettings.getInt(Settings.Global.ENABLE_GPU_DEBUG_LAYERS, 0); if (enable != 0) { - String gpuDebugApp = Settings.Global.getString(context.getContentResolver(), - Settings.Global.GPU_DEBUG_APP); + String gpuDebugApp = coreSettings.getString(Settings.Global.GPU_DEBUG_APP); String packageName = context.getPackageName(); @@ -115,8 +142,22 @@ public class GraphicsEnvironment { // the layers specified by the app. layerPaths = mDebugLayerPath + ":"; - String layers = Settings.Global.getString(context.getContentResolver(), - Settings.Global.GPU_DEBUG_LAYERS); + + // If there is a debug layer app specified, add its path. + String gpuDebugLayerApp = + coreSettings.getString(Settings.Global.GPU_DEBUG_LAYER_APP); + + if (gpuDebugLayerApp != null && !gpuDebugLayerApp.isEmpty()) { + Log.i(TAG, "GPU debug layer app: " + gpuDebugLayerApp); + String paths = getDebugLayerAppPaths(context, gpuDebugLayerApp); + if (paths != null) { + // Append the path so files placed in the app's base directory will + // override the external path + layerPaths += paths + ":"; + } + } + + String layers = coreSettings.getString(Settings.Global.GPU_DEBUG_LAYERS); Log.i(TAG, "Debug layer list: " + layers); if (layers != null && !layers.isEmpty()) { @@ -290,6 +331,7 @@ public class GraphicsEnvironment { return null; } + private static native int getCanLoadSystemLibraries(); private static native void setLayerPaths(ClassLoader classLoader, String layerPaths); private static native void setDebugLayers(String layers); private static native void setDriverPath(String path); diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java index acb75778e08e..c6e457436025 100644 --- a/core/java/android/provider/Settings.java +++ b/core/java/android/provider/Settings.java @@ -11631,6 +11631,12 @@ public final class Settings { public static final String GPU_DEBUG_LAYERS = "gpu_debug_layers"; /** + * Addition app for GPU layer discovery + * @hide + */ + public static final String GPU_DEBUG_LAYER_APP = "gpu_debug_layer_app"; + + /** * Control whether the process CPU usage meter should be shown. * * @deprecated This functionality is no longer available as of |
