diff options
| author | 2024-12-11 11:08:01 -0800 | |
|---|---|---|
| committer | 2024-12-11 11:08:01 -0800 | |
| commit | 6d71f81efe6dde84e41aca8b5be85d4edbbd971c (patch) | |
| tree | a10a2ee3692ee476735aa0d58c9913d383491b6a | |
| parent | 7621da1afed54d95581f4b70dc4d8185f567b4c2 (diff) | |
| parent | db250fbeb776e73d27ac6e718c1b54e9e2d60b77 (diff) | |
Merge "Looper: Add app and thread info to slow message log" into main am: db250fbeb7
Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/2973491
Change-Id: I768d9fb20db2724e6bf45f16ae06feff05dd3c8f
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
| -rw-r--r-- | core/java/android/os/Looper.java | 43 | ||||
| -rw-r--r-- | core/java/android/os/Process.java | 3 |
2 files changed, 42 insertions, 4 deletions
diff --git a/core/java/android/os/Looper.java b/core/java/android/os/Looper.java index ddf2b61324ad..012590510714 100644 --- a/core/java/android/os/Looper.java +++ b/core/java/android/os/Looper.java @@ -332,16 +332,55 @@ public final class Looper { return -1; } + private static int getThreadGroup() { + int threadGroup = Process.THREAD_GROUP_DEFAULT; + + if (!Process.isIsolated()) { + threadGroup = Process.getProcessGroup(Process.myTid()); + } + return threadGroup; + } + + private static String threadGroupToString(int threadGroup) { + switch (threadGroup) { + case Process.THREAD_GROUP_BACKGROUND: + return "BACKGROUND"; + case Process.THREAD_GROUP_FOREGROUND: + return "FOREGROUND"; + case Process.THREAD_GROUP_SYSTEM: + return "SYSTEM"; + case Process.THREAD_GROUP_AUDIO_APP: + return "AUDIO_APP"; + case Process.THREAD_GROUP_AUDIO_SYS: + return "AUDIO_SYS"; + case Process.THREAD_GROUP_TOP_APP: + return "TOP_APP"; + case Process.THREAD_GROUP_RT_APP: + return "RT_APP"; + case Process.THREAD_GROUP_RESTRICTED: + return "RESTRICTED"; + default: + return "UNKNOWN"; + } + } + private static boolean showSlowLog(long threshold, long measureStart, long measureEnd, String what, Message msg) { final long actualTime = measureEnd - measureStart; if (actualTime < threshold) { return false; } + + String name = Process.myProcessName(); + String threadGroup = threadGroupToString(getThreadGroup()); + boolean isMain = myLooper() == getMainLooper(); + // For slow delivery, the current message isn't really important, but log it anyway. Slog.w(TAG, "Slow " + what + " took " + actualTime + "ms " - + Thread.currentThread().getName() + " h=" - + msg.target.getClass().getName() + " c=" + msg.callback + " m=" + msg.what); + + Thread.currentThread().getName() + " app=" + name + + " main=" + isMain + " group=" + threadGroup + + " h=" + msg.target.getClass().getName() + " c=" + msg.callback + + " m=" + msg.what); return true; } diff --git a/core/java/android/os/Process.java b/core/java/android/os/Process.java index 6cffd278d07b..907d96834857 100644 --- a/core/java/android/os/Process.java +++ b/core/java/android/os/Process.java @@ -553,10 +553,9 @@ public class Process { * Foreground thread group - All threads in * this group are scheduled with a normal share of the CPU. * Value is same as constant SP_FOREGROUND of enum SchedPolicy. - * Not used at this level. * @hide **/ - private static final int THREAD_GROUP_FOREGROUND = 1; + public static final int THREAD_GROUP_FOREGROUND = 1; /** * System thread group. |