mirror of
https://github.com/LawnchairLauncher/lawnchair.git
synced 2026-03-01 16:26:47 +00:00
Saving heap dump immediately as reported by StrictMode
Can do this via API with the exact heap state that triggered the callback because using API allows to avoid deadlock that we'd have in main thread if we used shell command. checkDetectedLeaks() is still needed, as I'll add throwing an exception there soon. Bug: 139137636 Change-Id: I3c8670071b058c5c146ac58bb16152c980553065
This commit is contained in:
@@ -35,9 +35,11 @@ import android.content.pm.ActivityInfo;
|
||||
import android.content.pm.LauncherActivityInfo;
|
||||
import android.content.pm.LauncherApps;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.os.Debug;
|
||||
import android.os.Process;
|
||||
import android.os.RemoteException;
|
||||
import android.os.StrictMode;
|
||||
import android.util.Log;
|
||||
|
||||
import androidx.test.InstrumentationRegistry;
|
||||
import androidx.test.uiautomator.By;
|
||||
@@ -117,6 +119,14 @@ public abstract class AbstractLauncherUiTest {
|
||||
// so let's just mark the fact that the leak has happened.
|
||||
if (sDetectedActivityLeak == null) {
|
||||
sDetectedActivityLeak = violation.toString();
|
||||
try {
|
||||
Debug.dumpHprofData(
|
||||
getInstrumentation().getTargetContext()
|
||||
.getFilesDir().getPath()
|
||||
+ "/ActivityLeakHeapDump.hprof");
|
||||
} catch (IOException e) {
|
||||
Log.e(TAG, "dumpHprofData failed", e);
|
||||
}
|
||||
}
|
||||
});
|
||||
StrictMode.setVmPolicy(builder.build());
|
||||
@@ -126,18 +136,6 @@ public abstract class AbstractLauncherUiTest {
|
||||
public static void checkDetectedLeaks() {
|
||||
if (sDetectedActivityLeak != null && !sActivityLeakReported) {
|
||||
sActivityLeakReported = true;
|
||||
|
||||
final UiDevice device = UiDevice.getInstance(getInstrumentation());
|
||||
try {
|
||||
device.executeShellCommand(
|
||||
"am dumpheap "
|
||||
+ device.getLauncherPackageName()
|
||||
+ " "
|
||||
+ getInstrumentation().getTargetContext().getFilesDir().getPath()
|
||||
+ "/ActivityLeakHeapDump.hprof");
|
||||
} catch (IOException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user