diff options
| -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. |