summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Eric Miao <ericymiao@google.com> 2024-12-12 13:13:33 -0800
committer Android (Google) Code Review <android-gerrit@google.com> 2024-12-12 13:13:33 -0800
commit20c9033e2385a42b0ed813491c7658ad84f96e83 (patch)
tree2a5d471729269359f344f63ae6a2130f2a4d91ff
parent4aae159660e8585672e7b0523b4db554642331f0 (diff)
parent512e4239dd3bbd55943bb786b1d41eb2fb0367a7 (diff)
Merge "Add ability to dump bitmaps with `android.os.Debug.dumpHprofData()`" into main
-rw-r--r--core/java/android/app/ActivityThread.java8
-rw-r--r--core/java/android/os/Debug.java42
2 files changed, 43 insertions, 7 deletions
diff --git a/core/java/android/app/ActivityThread.java b/core/java/android/app/ActivityThread.java
index ec173338f262..717a2acb4b4a 100644
--- a/core/java/android/app/ActivityThread.java
+++ b/core/java/android/app/ActivityThread.java
@@ -7098,12 +7098,9 @@ public final class ActivityThread extends ClientTransactionHandler
System.runFinalization();
System.gc();
}
- if (dhd.dumpBitmaps != null) {
- Bitmap.dumpAll(dhd.dumpBitmaps);
- }
try (ParcelFileDescriptor fd = dhd.fd) {
if (dhd.managed) {
- Debug.dumpHprofData(dhd.path, fd.getFileDescriptor());
+ Debug.dumpHprofData(dhd.path, fd.getFileDescriptor(), dhd.dumpBitmaps);
} else if (dhd.mallocInfo) {
Debug.dumpNativeMallocInfo(fd.getFileDescriptor());
} else {
@@ -7128,9 +7125,6 @@ public final class ActivityThread extends ClientTransactionHandler
if (dhd.finishCallback != null) {
dhd.finishCallback.sendResult(null);
}
- if (dhd.dumpBitmaps != null) {
- Bitmap.dumpAll(null); // clear dump
- }
}
final void handleDispatchPackageBroadcast(int cmd, String[] packages) {
diff --git a/core/java/android/os/Debug.java b/core/java/android/os/Debug.java
index ef1e6c9405f3..2bc6ab5a18e9 100644
--- a/core/java/android/os/Debug.java
+++ b/core/java/android/os/Debug.java
@@ -22,6 +22,7 @@ import android.annotation.Nullable;
import android.app.AppGlobals;
import android.compat.annotation.UnsupportedAppUsage;
import android.content.Context;
+import android.graphics.Bitmap;
import android.util.Log;
import com.android.internal.util.FastPrintWriter;
@@ -2139,6 +2140,47 @@ public final class Debug
}
/**
+ * Like dumpHprofData(String), but takes an argument of bitmapFormat,
+ * which can be png, jpg, webp, or null (no bitmaps in heapdump).
+ *
+ * @hide
+ */
+ public static void dumpHprofData(String fileName, String bitmapFormat)
+ throws IOException {
+ try {
+ if (bitmapFormat != null) {
+ Bitmap.dumpAll(bitmapFormat);
+ }
+ VMDebug.dumpHprofData(fileName);
+ } finally {
+ if (bitmapFormat != null) {
+ Bitmap.dumpAll(null); // clear dump data
+ }
+ }
+ }
+
+ /**
+ * Like dumpHprofData(String, FileDescriptor), but takes an argument
+ * of bitmapFormat, which can be png, jpg, webp, or null (no bitmaps
+ * in heapdump).
+ *
+ * @hide
+ */
+ public static void dumpHprofData(String fileName, FileDescriptor fd,
+ String bitmapFormat) throws IOException {
+ try {
+ if (bitmapFormat != null) {
+ Bitmap.dumpAll(bitmapFormat);
+ }
+ VMDebug.dumpHprofData(fileName, fd);
+ } finally {
+ if (bitmapFormat != null) {
+ Bitmap.dumpAll(null); // clear dump data
+ }
+ }
+ }
+
+ /**
* Collect "hprof" and send it to DDMS. This may cause a GC.
*
* @throws UnsupportedOperationException if the VM was built without