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
This commit is contained in:
Tim Murray
2016-08-07 20:17:47 -07:00
parent a0a718f5db
commit feb846c299

View 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
}
}
}
}