Merge change 23388 into eclair
* changes: DDMS now queries the VM for its features.
This commit is contained in:
@@ -604,7 +604,7 @@ public class Client {
|
||||
"Good handshake from client, sending HELO to " + mClientData.getPid());
|
||||
JdwpPacket.consumeHandshake(mReadBuffer);
|
||||
mConnState = ST_NEED_DDM_PKT;
|
||||
HandleHello.sendHELO(this, SERVER_PROTOCOL_VERSION);
|
||||
HandleHello.sendHelloCommands(this, SERVER_PROTOCOL_VERSION);
|
||||
// see if we have another packet in the buffer
|
||||
return getJdwpPacket();
|
||||
case JdwpPacket.HANDSHAKE_BAD:
|
||||
|
||||
@@ -24,6 +24,7 @@ import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
@@ -99,6 +100,18 @@ public class ClientData {
|
||||
*/
|
||||
public final static String HEAP_OBJECTS_ALLOCATED = "objectsAllocated"; // $NON-NLS-1$
|
||||
|
||||
/**
|
||||
* String for feature enabling starting/stopping method profiling
|
||||
* @see #hasFeature(String)
|
||||
*/
|
||||
public final static String FEATURE_PROFILING = "method-trace-profiling"; // $NON-NLS-1$
|
||||
|
||||
/**
|
||||
* String for feature allowing to dump hprof files
|
||||
* @see #hasFeature(String)
|
||||
*/
|
||||
public final static String FEATURE_HPROF = "hprof-heap-dump"; // $NON-NLS-1$
|
||||
|
||||
// is this a DDM-aware client?
|
||||
private boolean mIsDdmAware;
|
||||
|
||||
@@ -114,6 +127,9 @@ public class ClientData {
|
||||
// how interested are we in a debugger?
|
||||
private int mDebuggerInterest;
|
||||
|
||||
// List of supported feature by the client.
|
||||
private final HashSet<String> mFeatures = new HashSet<String>();
|
||||
|
||||
// Thread tracking (THCR, THDE).
|
||||
private TreeMap<Integer,ThreadInfo> mThreadMap;
|
||||
|
||||
@@ -498,5 +514,21 @@ public class ClientData {
|
||||
public synchronized AllocationInfo[] getAllocations() {
|
||||
return mAllocations;
|
||||
}
|
||||
|
||||
void addFeature(String feature) {
|
||||
mFeatures.add(feature);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns true if the {@link Client} supports the given <var>feature</var>
|
||||
* @param feature The feature to test.
|
||||
* @return true if the feature is supported
|
||||
*
|
||||
* @see ClientData#FEATURE_PROFILING
|
||||
* @see ClientData#FEATURE_HPROF
|
||||
*/
|
||||
public boolean hasFeature(String feature) {
|
||||
return mFeatures.contains(feature);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -29,7 +29,6 @@ final class HandleHello extends ChunkHandler {
|
||||
|
||||
private static final HandleHello mInst = new HandleHello();
|
||||
|
||||
|
||||
private HandleHello() {}
|
||||
|
||||
/**
|
||||
@@ -55,6 +54,18 @@ final class HandleHello extends ChunkHandler {
|
||||
Log.d("ddm-hello", "Now disconnected: " + client);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sends HELLO-type commands to the VM after a good handshake.
|
||||
* @param client
|
||||
* @param serverProtocolVersion
|
||||
* @throws IOException
|
||||
*/
|
||||
public static void sendHelloCommands(Client client, int serverProtocolVersion)
|
||||
throws IOException {
|
||||
sendHELO(client, serverProtocolVersion);
|
||||
sendFEAT(client);
|
||||
}
|
||||
|
||||
/**
|
||||
* Chunk handler entry point.
|
||||
*/
|
||||
@@ -141,6 +152,7 @@ final class HandleHello extends ChunkHandler {
|
||||
for (i = 0; i < featureCount; i++) {
|
||||
int len = data.getInt();
|
||||
String feature = getString(data, len);
|
||||
client.getClientData().addFeature(feature);
|
||||
|
||||
Log.d("ddm-hello", "Feature: " + feature);
|
||||
}
|
||||
@@ -160,6 +172,5 @@ final class HandleHello extends ChunkHandler {
|
||||
Log.d("ddm-heap", "Sending " + name(CHUNK_FEAT));
|
||||
client.sendAndConsume(packet, mInst);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -39,11 +39,15 @@ public class InfoPanel extends TablePanel {
|
||||
"App description:",
|
||||
"VM version:",
|
||||
"Process ID:",
|
||||
"Supports Profiling Control:",
|
||||
"Supports HPROF Control:",
|
||||
};
|
||||
private static final int ENT_DDM_AWARE = 0;
|
||||
private static final int ENT_APP_DESCR = 1;
|
||||
private static final int ENT_VM_VERSION = 2;
|
||||
private static final int ENT_PROCESS_ID = 3;
|
||||
private static final int ENT_DDM_AWARE = 0;
|
||||
private static final int ENT_APP_DESCR = 1;
|
||||
private static final int ENT_VM_VERSION = 2;
|
||||
private static final int ENT_PROCESS_ID = 3;
|
||||
private static final int ENT_SUPPORTS_PROFILING = 4;
|
||||
private static final int ENT_SUPPORTS_HPROF = 5;
|
||||
|
||||
/**
|
||||
* Create our control(s).
|
||||
@@ -160,6 +164,10 @@ public class InfoPanel extends TablePanel {
|
||||
item.setText(1, isDdmAware);
|
||||
item = mTable.getItem(ENT_PROCESS_ID);
|
||||
item.setText(1, pid);
|
||||
item = mTable.getItem(ENT_SUPPORTS_PROFILING);
|
||||
item.setText(1, Boolean.toString(cd.hasFeature(ClientData.FEATURE_PROFILING)));
|
||||
item = mTable.getItem(ENT_SUPPORTS_HPROF);
|
||||
item.setText(1, Boolean.toString(cd.hasFeature(ClientData.FEATURE_HPROF)));
|
||||
}
|
||||
|
||||
mCol2.pack();
|
||||
|
||||
Reference in New Issue
Block a user