diff options
author | 2024-04-03 22:09:24 +0000 | |
---|---|---|
committer | 2024-04-11 20:38:19 +0000 | |
commit | 18e4fdc211e29fc669b5eec106ffe97de149e7b3 (patch) | |
tree | 4647c7edec142f16b583f1093e207e85bb661a6e | |
parent | 22be9ae76937aef3723d6d3bff0f29ab2866ec47 (diff) |
Add Framework and VM capabilities to am
DDM is set to be deprecated soon. We need another venue to discover
the capabilities of the VM and Framework we used to get from FEAT and
HELO packets.
Test: NA
Bug: 333926583
Change-Id: I4743e2e840b6f87f9eb41a51e36ef0b6cab3ebe1
-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; } |