OSDN Git Service

Increase UI and RenderThread priority when not using FIFO.
authorTim Murray <timmurray@google.com>
Wed, 27 Jul 2016 22:07:00 +0000 (15:07 -0700)
committerTim Murray <timmurray@google.com>
Wed, 27 Jul 2016 22:07:00 +0000 (15:07 -0700)
bug 30441279

Change-Id: I5714179236af59ce79dbe118c7870d5f1771168a

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

index 8e4af12..71280be 100644 (file)
@@ -12585,7 +12585,7 @@ public final class ActivityManagerService extends ActivityManagerNative
             synchronized (mPidsSelfLocked) {
                 int pid = Binder.getCallingPid();
                 proc = mPidsSelfLocked.get(pid);
-                if (mUseFifoUiScheduling && proc != null && proc.renderThreadTid == 0 && tid > 0) {
+                if (proc != null && proc.renderThreadTid == 0 && tid > 0) {
                     // ensure the tid belongs to the process
                     if (!Process.isThreadInProcess(pid, tid)) {
                         throw new IllegalArgumentException(
@@ -12598,8 +12598,12 @@ public final class ActivityManagerService extends ActivityManagerNative
                     // promote to FIFO now
                     if (proc.curSchedGroup == ProcessList.SCHED_GROUP_TOP_APP) {
                         if (DEBUG_OOM_ADJ) Slog.d("UI_FIFO", "Promoting " + tid + "out of band");
-                        Process.setThreadScheduler(proc.renderThreadTid,
-                            Process.SCHED_FIFO | Process.SCHED_RESET_ON_FORK, 1);
+                        if (mUseFifoUiScheduling) {
+                            Process.setThreadScheduler(proc.renderThreadTid,
+                                Process.SCHED_FIFO | Process.SCHED_RESET_ON_FORK, 1);
+                        } else {
+                            Process.setThreadPriority(proc.renderThreadTid, -10);
+                        }
                     }
                 } else {
                     if (DEBUG_OOM_ADJ) {
@@ -20294,6 +20298,12 @@ public final class ActivityManagerService extends ActivityManagerNative
                                         Slog.d("UI_FIFO", "Not setting RenderThread TID");
                                     }
                                 }
+                            } else {
+                                // Boost priority for top app UI and render threads
+                                Process.setThreadPriority(app.pid, -10);
+                                if (app.renderThreadTid != 0) {
+                                    Process.setThreadPriority(app.renderThreadTid, -10);
+                                }
                             }
                         }
                     } else if (oldSchedGroup == ProcessList.SCHED_GROUP_TOP_APP &&
@@ -20312,6 +20322,12 @@ public final class ActivityManagerService extends ActivityManagerNative
                                     Process.SCHED_OTHER, 0);
                                 Process.setThreadPriority(app.renderThreadTid, -4);
                             }
+                        } else {
+                            // Reset priority for top app UI and render threads
+                            Process.setThreadPriority(app.pid, 0);
+                            if (app.renderThreadTid != 0) {
+                                Process.setThreadPriority(app.renderThreadTid, 0);
+                            }
                         }
                     }
                 } catch (Exception e) {