Merge "Remove 1.3s "Waiting for Debugger" delay"

This commit is contained in:
Fabien Sanglard
2022-12-21 18:44:13 +00:00
committed by Gerrit Code Review

View File

@@ -981,6 +981,43 @@ public final class Debug
} }
/**
* Wait until a debugger attaches. As soon as a debugger attaches,
* suspend all Java threads and send VM_START (a.k.a VM_INIT)
* packet.
*
* @hide
*/
public static void suspendAllAndSendVmStart() {
if (!VMDebug.isDebuggingEnabled()) {
return;
}
// if DDMS is listening, inform them of our plight
System.out.println("Sending WAIT chunk");
byte[] data = new byte[] { 0 }; // 0 == "waiting for debugger"
Chunk waitChunk = new Chunk(ChunkHandler.type("WAIT"), data, 0, 1);
DdmServer.sendChunk(waitChunk);
// We must wait until a debugger is connected (debug socket is
// open and at least one non-DDM JDWP packedt has been received.
// This guarantees that oj-libjdwp has been attached and that
// ART's default implementation of suspendAllAndSendVmStart has
// been replaced with an implementation that will suspendAll and
// send VM_START.
System.out.println("Waiting for debugger first packet");
while (!isDebuggerConnected()) {
try {
Thread.sleep(100);
} catch (InterruptedException ie) {
}
}
System.out.println("Debug.suspendAllAndSentVmStart");
VMDebug.suspendAllAndSendVmStart();
System.out.println("Debug.suspendAllAndSendVmStart, resumed");
}
/** /**
* Wait until a debugger attaches. As soon as the debugger attaches, * Wait until a debugger attaches. As soon as the debugger attaches,
* this returns, so you will need to place a breakpoint after the * this returns, so you will need to place a breakpoint after the