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

Commit 1fc9f221 authored by Treehugger Robot's avatar Treehugger Robot Committed by Gerrit Code Review
Browse files

Merge "Add Framework and VM capabilities to am" into main

parents f647719c 18e4fdc2
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;
    }