From feb846c299cba3cb73eb19ecc2d7fb6de9be85d6 Mon Sep 17 00:00:00 2001 From: Tim Murray Date: Sun, 7 Aug 2016 20:17:47 -0700 Subject: [PATCH] Fix exception spam in ActivityManagerService. 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 --- .../server/am/ActivityManagerService.java | 43 ++++++++++++++----- 1 file changed, 32 insertions(+), 11 deletions(-) diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java index ee15cc88dead6..a09f014e26d86 100644 --- a/services/core/java/com/android/server/am/ActivityManagerService.java +++ b/services/core/java/com/android/server/am/ActivityManagerService.java @@ -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 + } } } }