From 3b5da2c4af8a5f5070803149ea3c53458768efb6 Mon Sep 17 00:00:00 2001 From: Winson Chung Date: Wed, 3 Jul 2024 03:31:38 +0000 Subject: Add analagous finish activity traces in the client side MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Useful when cross referencing where an app-requested finish may be happening - Usage:     // Enabling     adb shell setprop persist.wm.debug.finish_activity true     adb reboot     adb logcat -s "Instrumentation"     // Disabling     adb shell setprop persist.wm.debug.finish_activity \"\"     adb reboot Flag: EXEMPT bugfix Bug: 309020623 Test: adb shell setprop persist.wm.debug.finish_activity true Change-Id: Ia2a5ce10c236adcedd354e1661877bab1cf010df --- core/java/android/app/Activity.java | 4 ++++ core/java/android/app/Instrumentation.java | 2 ++ .../Shell/src/com/android/wm/shell/docs/debugging.md | 15 ++++++++++++++- 3 files changed, 20 insertions(+), 1 deletion(-) diff --git a/core/java/android/app/Activity.java b/core/java/android/app/Activity.java index 0947e33cb4d1..5a3a8d525b69 100644 --- a/core/java/android/app/Activity.java +++ b/core/java/android/app/Activity.java @@ -21,6 +21,7 @@ import static android.Manifest.permission.DETECT_SCREEN_CAPTURE; import static android.Manifest.permission.INTERACT_ACROSS_USERS; import static android.Manifest.permission.INTERACT_ACROSS_USERS_FULL; import static android.Manifest.permission.INTERNAL_SYSTEM_WINDOW; +import static android.app.Instrumentation.DEBUG_FINISH_ACTIVITY; import static android.app.WindowConfiguration.WINDOWING_MODE_PINNED; import static android.app.WindowConfiguration.inMultiWindowMode; import static android.os.Process.myUid; @@ -7297,6 +7298,9 @@ public class Activity extends ContextThemeWrapper */ @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) private void finish(int finishTask) { + if (DEBUG_FINISH_ACTIVITY) { + Log.d("Instrumentation", "finishActivity: finishTask=" + finishTask, new Throwable()); + } if (mParent == null) { int resultCode; Intent resultData; diff --git a/core/java/android/app/Instrumentation.java b/core/java/android/app/Instrumentation.java index db216b1af974..be270463e576 100644 --- a/core/java/android/app/Instrumentation.java +++ b/core/java/android/app/Instrumentation.java @@ -107,6 +107,8 @@ public class Instrumentation { // If set, will print the stack trace for activity starts within the process static final boolean DEBUG_START_ACTIVITY = Build.IS_DEBUGGABLE && SystemProperties.getBoolean("persist.wm.debug.start_activity", false); + static final boolean DEBUG_FINISH_ACTIVITY = Build.IS_DEBUGGABLE && + SystemProperties.getBoolean("persist.wm.debug.finish_activity", false); /** * @hide diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/docs/debugging.md b/libs/WindowManager/Shell/src/com/android/wm/shell/docs/debugging.md index b1cbe8d98397..3572d161f5b9 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/docs/debugging.md +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/docs/debugging.md @@ -97,7 +97,7 @@ adb reboot adb logcat -s "SurfaceControlRegistry" ``` -## Tracing activity starts in the app process +## Tracing activity starts & finishes in the app process It's sometimes useful to know when to see a stack trace of when an activity starts in the app code (ie. if you are repro'ing a bug related to activity starts). You can enable this system property to @@ -113,6 +113,19 @@ adb shell setprop persist.wm.debug.start_activity \"\" adb reboot ``` +Likewise, to trace where a finish() call may be made in the app process, you can enable this system +property: +```shell +# Enabling +adb shell setprop persist.wm.debug.finish_activity true +adb reboot +adb logcat -s "Instrumentation" + +# Disabling +adb shell setprop persist.wm.debug.finish_activity \"\" +adb reboot +``` + ## Dumps Because the Shell library is built as a part of SystemUI, dumping the state is currently done as a -- cgit v1.2.3-59-g8ed1b