Merge "Appinfo: Make adb the app debug source of truth" into main am: 9f11cb2610
Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/3027508
Change-Id: Iefdb822b8305e87c7aa1dde4deb31552d5743130
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
diff --git a/core/java/android/app/ActivityThread.java b/core/java/android/app/ActivityThread.java
index eb742fa..5e69ec1 100644
--- a/core/java/android/app/ActivityThread.java
+++ b/core/java/android/app/ActivityThread.java
@@ -7236,6 +7236,8 @@
}
}
+ VMDebug.setUserId(UserHandle.myUserId());
+ VMDebug.addApplication(data.appInfo.packageName);
// send up app name; do this *before* waiting for debugger
Process.setArgV0(data.processName);
android.ddm.DdmHandleAppName.setAppName(data.processName,
@@ -7758,9 +7760,20 @@
file.getParentFile().mkdirs();
Debug.startMethodTracing(file.toString(), 8 * 1024 * 1024);
}
+
+ if (ii.packageName != null) {
+ VMDebug.addApplication(ii.packageName);
+ }
}
private void handleFinishInstrumentationWithoutRestart() {
+ LoadedApk loadedApk = getApplication().mLoadedApk;
+ // Only remove instrumentation app if this was not a self-testing app.
+ if (mInstrumentationPackageName != null && loadedApk != null && !mInstrumentationPackageName
+ .equals(loadedApk.mPackageName)) {
+ VMDebug.removeApplication(mInstrumentationPackageName);
+ }
+
mInstrumentation.onDestroy();
mInstrumentationPackageName = null;
mInstrumentationAppDir = null;
@@ -8794,6 +8807,11 @@
return false;
}
+ void addApplication(@NonNull Application app) {
+ mAllApplications.add(app);
+ VMDebug.addApplication(app.mLoadedApk.mPackageName);
+ }
+
@Override
public boolean isInDensityCompatMode() {
return mDensityCompatMode;
diff --git a/core/java/android/app/LoadedApk.java b/core/java/android/app/LoadedApk.java
index 1df8f63..1e45d6f 100644
--- a/core/java/android/app/LoadedApk.java
+++ b/core/java/android/app/LoadedApk.java
@@ -1478,7 +1478,7 @@
+ " package " + mPackageName + ": " + e.toString(), e);
}
}
- mActivityThread.mAllApplications.add(app);
+ mActivityThread.addApplication(app);
mApplication = app;
if (!allowDuplicateInstances) {
synchronized (sApplications) {
diff --git a/core/java/android/os/Debug.java b/core/java/android/os/Debug.java
index a55398a..ef1e6c94 100644
--- a/core/java/android/os/Debug.java
+++ b/core/java/android/os/Debug.java
@@ -114,6 +114,7 @@
"opengl-tracing",
"view-hierarchy",
"support_boot_stages",
+ "app_info",
};
/**
@@ -1016,14 +1017,14 @@
// send VM_START.
System.out.println("Waiting for debugger first packet");
- mWaiting = true;
+ setWaitingForDebugger(true);
while (!isDebuggerConnected()) {
try {
Thread.sleep(100);
} catch (InterruptedException ie) {
}
}
- mWaiting = false;
+ setWaitingForDebugger(false);
System.out.println("Debug.suspendAllAndSentVmStart");
VMDebug.suspendAllAndSendVmStart();
@@ -1049,12 +1050,12 @@
Chunk waitChunk = new Chunk(ChunkHandler.type("WAIT"), data, 0, 1);
DdmServer.sendChunk(waitChunk);
- mWaiting = true;
+ setWaitingForDebugger(true);
while (!isDebuggerConnected()) {
try { Thread.sleep(SPIN_DELAY); }
catch (InterruptedException ie) {}
}
- mWaiting = false;
+ setWaitingForDebugger(false);
System.out.println("Debugger has connected");
@@ -1112,6 +1113,16 @@
}
/**
+ * Set whether the app is waiting for a debugger to connect
+ *
+ * @hide
+ */
+ private static void setWaitingForDebugger(boolean waiting) {
+ mWaiting = waiting;
+ VMDebug.setWaitingForDebugger(waiting);
+ }
+
+ /**
* Returns an array of strings that identify Framework features. This is
* used by DDMS to determine what sorts of operations the Framework can
* perform.
diff --git a/core/java/android/os/Process.java b/core/java/android/os/Process.java
index df6ece4..cd8788d 100644
--- a/core/java/android/os/Process.java
+++ b/core/java/android/os/Process.java
@@ -41,6 +41,7 @@
import com.android.internal.util.Preconditions;
import com.android.sdksandbox.flags.Flags;
+import dalvik.system.VMDebug;
import dalvik.system.VMRuntime;
import libcore.io.IoUtils;
@@ -1411,6 +1412,7 @@
public static void setArgV0(@NonNull String text) {
sArgV0 = text;
setArgV0Native(text);
+ VMDebug.setCurrentProcessName(text);
}
private static native void setArgV0Native(String text);