From 02758a9a80ab82154aa172ef1a0138f4c1d6e9bd Mon Sep 17 00:00:00 2001 From: Leonard Mosescu Date: Thu, 6 Oct 2016 17:32:05 -0700 Subject: Adding "attach-agent" to ActivityManagerShellCommand This new command is used to attach runtime agents to a running application: attach-agent Attach an agent to the specified , which may be either a process name or a PID. Test: m test-art-host, manual testing: . invalid syntax, missing arguments . invalid syntax, extra arguments . invalid numeric PID . invalid process name . valid process, not debuggable . valid process, missing agent . valid process, valid agent Bug: 31682382 Change-Id: I61cc8bf20addb1702acc8e7aae65b2f9ed7c5ca0 Merged-In: Ife88dbf23991dde7945d9208e54cd014bb7ecdc6 --- core/java/android/app/ActivityThread.java | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) (limited to 'core/java/android/app/ActivityThread.java') diff --git a/core/java/android/app/ActivityThread.java b/core/java/android/app/ActivityThread.java index cae4be69c0fe..2c4cf7449c34 100644 --- a/core/java/android/app/ActivityThread.java +++ b/core/java/android/app/ActivityThread.java @@ -974,6 +974,10 @@ public final class ActivityThread { sendMessage(H.DUMP_HEAP, dhd, managed ? 1 : 0, 0, true /*async*/); } + public void attachAgent(String agent) { + sendMessage(H.ATTACH_AGENT, agent); + } + public void setSchedulingGroup(int group) { // Note: do this immediately, since going into the foreground // should happen regardless of what pending work we have to do @@ -1408,6 +1412,7 @@ public final class ActivityThread { public static final int MULTI_WINDOW_MODE_CHANGED = 152; public static final int PICTURE_IN_PICTURE_MODE_CHANGED = 153; public static final int LOCAL_VOICE_INTERACTION_STARTED = 154; + public static final int ATTACH_AGENT = 155; String codeToString(int code) { if (DEBUG_MESSAGES) { @@ -1464,6 +1469,7 @@ public final class ActivityThread { case MULTI_WINDOW_MODE_CHANGED: return "MULTI_WINDOW_MODE_CHANGED"; case PICTURE_IN_PICTURE_MODE_CHANGED: return "PICTURE_IN_PICTURE_MODE_CHANGED"; case LOCAL_VOICE_INTERACTION_STARTED: return "LOCAL_VOICE_INTERACTION_STARTED"; + case ATTACH_AGENT: return "ATTACH_AGENT"; } } return Integer.toString(code); @@ -1718,6 +1724,8 @@ public final class ActivityThread { case LOCAL_VOICE_INTERACTION_STARTED: handleLocalVoiceInteractionStarted((IBinder) ((SomeArgs) msg.obj).arg1, (IVoiceInteractor) ((SomeArgs) msg.obj).arg2); + case ATTACH_AGENT: + handleAttachAgent((String) msg.obj); break; } Object obj = msg.obj; @@ -2987,6 +2995,14 @@ public final class ActivityThread { } } + static final void handleAttachAgent(String agent) { + try { + VMDebug.attachAgent(agent); + } catch (IOException e) { + Slog.e(TAG, "Attaching agent failed: " + agent); + } + } + private static final ThreadLocal sCurrentBroadcastIntent = new ThreadLocal(); /** -- cgit v1.2.3