Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 18e4fdc2 authored by Fabien Sanglard's avatar Fabien Sanglard
Browse files

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
parent 22be9ae7
Loading
Loading
Loading
Loading
+11 −14
Original line number Diff line number Diff line
@@ -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);
+17 −0
Original line number Diff line number Diff line
@@ -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.
@@ -1105,6 +1111,17 @@ public final class Debug
        return VMDebug.getVmFeatureList();
    }

    /**
     * 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.
     *
+10 −0
Original line number Diff line number Diff line
@@ -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;
}
+26 −1
Original line number Diff line number Diff line
@@ -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;
    }