diff options
-rw-r--r-- | core/java/android/ddm/DdmHandleHello.java | 25 | ||||
-rw-r--r-- | core/java/android/os/Debug.java | 17 | ||||
-rw-r--r-- | proto/src/am_capabilities.proto | 10 | ||||
-rw-r--r-- | services/core/java/com/android/server/am/ActivityManagerShellCommand.java | 27 |
4 files changed, 64 insertions, 15 deletions
diff --git a/core/java/android/ddm/DdmHandleHello.java b/core/java/android/ddm/DdmHandleHello.java index a51a74075298..d9a18d785537 100644 --- a/core/java/android/ddm/DdmHandleHello.java +++ b/core/java/android/ddm/DdmHandleHello.java @@ -42,12 +42,6 @@ public class DdmHandleHello extends DdmHandle { private static DdmHandleHello mInstance = new DdmHandleHello(); - private static final String[] FRAMEWORK_FEATURES = new String[] { - "opengl-tracing", - "view-hierarchy", - "support_boot_stages" - }; - /* singleton, do not instantiate */ private DdmHandleHello() {} @@ -193,22 +187,25 @@ public class DdmHandleHello extends DdmHandle { if (false) Log.v("ddm-heap", "Got feature list request"); - int size = 4 + 4 * (vmFeatures.length + FRAMEWORK_FEATURES.length); - for (int i = vmFeatures.length-1; i >= 0; i--) + String[] fmFeatures = Debug.getFeatureList(); + int size = 4 + 4 * (vmFeatures.length + fmFeatures.length); + for (int i = vmFeatures.length - 1; i >= 0; i--) { size += vmFeatures[i].length() * 2; - for (int i = FRAMEWORK_FEATURES.length-1; i>= 0; i--) - size += FRAMEWORK_FEATURES[i].length() * 2; + } + for (int i = fmFeatures.length - 1; i >= 0; i--) { + size += fmFeatures[i].length() * 2; + } ByteBuffer out = ByteBuffer.allocate(size); out.order(ChunkHandler.CHUNK_ORDER); - out.putInt(vmFeatures.length + FRAMEWORK_FEATURES.length); + out.putInt(vmFeatures.length + fmFeatures.length); for (int i = vmFeatures.length-1; i >= 0; i--) { out.putInt(vmFeatures[i].length()); putString(out, vmFeatures[i]); } - for (int i = FRAMEWORK_FEATURES.length-1; i >= 0; i--) { - out.putInt(FRAMEWORK_FEATURES[i].length()); - putString(out, FRAMEWORK_FEATURES[i]); + for (int i = fmFeatures.length - 1; i >= 0; i--) { + out.putInt(fmFeatures[i].length()); + putString(out, fmFeatures[i]); } return new Chunk(CHUNK_FEAT, out); diff --git a/core/java/android/os/Debug.java b/core/java/android/os/Debug.java index f785cca4e9f4..a55398ac9752 100644 --- a/core/java/android/os/Debug.java +++ b/core/java/android/os/Debug.java @@ -110,6 +110,12 @@ public final class Debug private static final String DEFAULT_TRACE_BODY = "dmtrace"; private static final String DEFAULT_TRACE_EXTENSION = ".trace"; + private static final String[] FRAMEWORK_FEATURES = new String[] { + "opengl-tracing", + "view-hierarchy", + "support_boot_stages", + }; + /** * This class is used to retrieved various statistics about the memory mappings for this * process. The returned info is broken down by dalvik, native, and other. All results are in kB. @@ -1106,6 +1112,17 @@ public final class Debug } /** + * Returns an array of strings that identify Framework features. This is + * used by DDMS to determine what sorts of operations the Framework can + * perform. + * + * @hide + */ + public static String[] getFeatureList() { + return FRAMEWORK_FEATURES; + } + + /** * Change the JDWP port. * * @deprecated no longer needed or useful diff --git a/proto/src/am_capabilities.proto b/proto/src/am_capabilities.proto index d97bf816b150..fc9f7a4590bd 100644 --- a/proto/src/am_capabilities.proto +++ b/proto/src/am_capabilities.proto @@ -7,6 +7,16 @@ message Capability { string name = 1; } +message VMCapability { + string name = 1; +} + +message FrameworkCapability { + string name = 1; +} + message Capabilities { repeated Capability values = 1; + repeated VMCapability vm_capabilities = 2; + repeated FrameworkCapability framework_capabilities = 3; } diff --git a/services/core/java/com/android/server/am/ActivityManagerShellCommand.java b/services/core/java/com/android/server/am/ActivityManagerShellCommand.java index 7c6673145d34..de039fbdd509 100644 --- a/services/core/java/com/android/server/am/ActivityManagerShellCommand.java +++ b/services/core/java/com/android/server/am/ActivityManagerShellCommand.java @@ -96,6 +96,7 @@ import android.opengl.GLES10; import android.os.Binder; import android.os.Build; import android.os.Bundle; +import android.os.Debug; import android.os.IProgressListener; import android.os.ParcelFileDescriptor; import android.os.RemoteCallback; @@ -124,6 +125,8 @@ import com.android.server.LocalServices; import com.android.server.am.LowMemDetector.MemFactor; import com.android.server.am.nano.Capabilities; import com.android.server.am.nano.Capability; +import com.android.server.am.nano.FrameworkCapability; +import com.android.server.am.nano.VMCapability; import com.android.server.compat.PlatformCompat; import com.android.server.pm.UserManagerInternal; import com.android.server.utils.Slogf; @@ -442,6 +445,22 @@ final class ActivityManagerShellCommand extends ShellCommand { capabilities.values[i] = cap; } + String[] vmCapabilities = Debug.getVmFeatureList(); + capabilities.vmCapabilities = new VMCapability[vmCapabilities.length]; + for (int i = 0; i < vmCapabilities.length; i++) { + VMCapability cap = new VMCapability(); + cap.name = vmCapabilities[i]; + capabilities.vmCapabilities[i] = cap; + } + + String[] fmCapabilities = Debug.getFeatureList(); + capabilities.frameworkCapabilities = new FrameworkCapability[fmCapabilities.length]; + for (int i = 0; i < fmCapabilities.length; i++) { + FrameworkCapability cap = new FrameworkCapability(); + cap.name = fmCapabilities[i]; + capabilities.frameworkCapabilities[i] = cap; + } + try { getRawOutputStream().write(Capabilities.toByteArray(capabilities)); } catch (IOException e) { @@ -451,10 +470,16 @@ final class ActivityManagerShellCommand extends ShellCommand { } else { // Unfortunately we don't have protobuf text format capabilities here. // Fallback to line separated list instead for text parser. - pw.println("Format: 1"); + pw.println("Format: 2"); for (String capability : CAPABILITIES) { pw.println(capability); } + for (String capability : Debug.getVmFeatureList()) { + pw.println("vm:" + capability); + } + for (String capability : Debug.getFeatureList()) { + pw.println("framework:" + capability); + } } return 0; } |