OSDN Git Service

Fix exception spam in ActivityManagerService.
authorTim Murray <timmurray@google.com>
Mon, 8 Aug 2016 03:17:47 +0000 (20:17 -0700)
committerTim Murray <timmurray@google.com>
Wed, 10 Aug 2016 20:13:40 +0000 (13:13 -0700)
If a thread that ActivityManagerService should be setting to FIFO dies,
it throws an exception. However, it is expected that threads may
die (due to LMK or app behavior), so we should suppress as much of this
as possible.

bug 30746129

Change-Id: Ief1ab8568fe8b27284ec442570b6a06677998ff1

services/core/java/com/android/server/am/ActivityManagerService.java

index ee15cc8..a09f014 100644 (file)
@@ -2337,7 +2337,7 @@ public final class ActivityManagerService extends ActivityManagerNative
                                                 Process.SCHED_OTHER, 0);
                                         }
                                     } catch (IllegalArgumentException e) {
-                                        Slog.e(TAG, "Failed to set scheduling policy, thread does"
+                                        Slog.w(TAG, "Failed to set scheduling policy, thread does"
                                                 + " not exist:\n" + e);
                                     }
                                 }
@@ -12588,10 +12588,15 @@ public final class ActivityManagerService extends ActivityManagerNative
                     proc.vrThreadTid = tid;
 
                     // promote to FIFO now if the tid is non-zero
-                    if (proc.curSchedGroup == ProcessList.SCHED_GROUP_TOP_APP
-                            && proc.vrThreadTid > 0) {
-                        Process.setThreadScheduler(proc.vrThreadTid,
+                    try {
+                        if (proc.curSchedGroup == ProcessList.SCHED_GROUP_TOP_APP &&
+                            proc.vrThreadTid > 0) {
+                            Process.setThreadScheduler(proc.vrThreadTid,
                                 Process.SCHED_FIFO | Process.SCHED_RESET_ON_FORK, 1);
+                        }
+                    } catch (IllegalArgumentException e) {
+                        Slog.e(TAG, "Failed to set scheduling policy, thread does"
+                               + " not exist:\n" + e);
                     }
                 }
             }
@@ -20353,17 +20358,29 @@ public final class ActivityManagerService extends ActivityManagerNative
                         if (oldSchedGroup != ProcessList.SCHED_GROUP_TOP_APP) {
                             // Switch VR thread for app to SCHED_FIFO
                             if (mInVrMode && app.vrThreadTid != 0) {
-                                Process.setThreadScheduler(app.vrThreadTid,
-                                    Process.SCHED_FIFO | Process.SCHED_RESET_ON_FORK, 1);
+                                try {
+                                    Process.setThreadScheduler(app.vrThreadTid,
+                                        Process.SCHED_FIFO | Process.SCHED_RESET_ON_FORK, 1);
+                                } catch (IllegalArgumentException e) {
+                                    // thread died, ignore
+                                }
                             }
                             if (mUseFifoUiScheduling) {
                                 // Switch UI pipeline for app to SCHED_FIFO
                                 app.savedPriority = Process.getThreadPriority(app.pid);
-                                Process.setThreadScheduler(app.pid,
-                                    Process.SCHED_FIFO | Process.SCHED_RESET_ON_FORK, 1);
-                                if (app.renderThreadTid != 0) {
-                                    Process.setThreadScheduler(app.renderThreadTid,
+                                try {
+                                    Process.setThreadScheduler(app.pid,
                                         Process.SCHED_FIFO | Process.SCHED_RESET_ON_FORK, 1);
+                                } catch (IllegalArgumentException e) {
+                                    // thread died, ignore
+                                }
+                                if (app.renderThreadTid != 0) {
+                                    try {
+                                        Process.setThreadScheduler(app.renderThreadTid,
+                                            Process.SCHED_FIFO | Process.SCHED_RESET_ON_FORK, 1);
+                                    } catch (IllegalArgumentException e) {
+                                        // thread died, ignore
+                                    }
                                     if (DEBUG_OOM_ADJ) {
                                         Slog.d("UI_FIFO", "Set RenderThread (TID " +
                                             app.renderThreadTid + ") to FIFO");
@@ -20377,7 +20394,11 @@ public final class ActivityManagerService extends ActivityManagerNative
                                 // Boost priority for top app UI and render threads
                                 Process.setThreadPriority(app.pid, -10);
                                 if (app.renderThreadTid != 0) {
-                                    Process.setThreadPriority(app.renderThreadTid, -10);
+                                    try {
+                                        Process.setThreadPriority(app.renderThreadTid, -10);
+                                    } catch (IllegalArgumentException e) {
+                                        // thread died, ignore
+                                    }
                                 }
                             }
                         }