OSDN Git Service

Follow up for I420bee8a11d430b1e52ded050536e56a85a48800
authorJorim Jaggi <jjaggi@google.com>
Mon, 25 Jul 2016 15:23:39 +0000 (17:23 +0200)
committerJorim Jaggi <jjaggi@google.com>
Wed, 27 Jul 2016 09:35:05 +0000 (11:35 +0200)
- Log when hasTopUi state changes
- Add hasTopUi to dumpstate
- Only allow persistent processes to honor this flag

Bug: 30292998
Change-Id: Ifb481c8d50b102ea4cac3078ea3eb39e45c08259

core/java/android/app/IActivityManager.java
services/core/java/com/android/server/am/ActivityManagerService.java
services/core/java/com/android/server/am/ProcessRecord.java

index d54ce4b..e411e03 100644 (file)
@@ -662,9 +662,11 @@ public interface IActivityManager extends IInterface {
     public void setRenderThread(int tid) throws RemoteException;
 
     /**
-     * Let's activity manager know whether the calling process is currently showing "top-level" UI
+     * Lets activity manager know whether the calling process is currently showing "top-level" UI
      * that is not an activity, i.e. windows on the screen the user is currently interacting with.
      *
+     * <p>This flag can only be set for persistent processes.
+     *
      * @param hasTopUi Whether the calling process has "top-level" UI.
      */
     public void setHasTopUi(boolean hasTopUi) throws RemoteException;
index 8e4af12..1bc00fa 100644 (file)
@@ -12700,6 +12700,7 @@ public final class ActivityManagerService extends ActivityManagerNative
                         return;
                     }
                     if (pr.hasTopUi != hasTopUi) {
+                        Slog.i(TAG, "Setting hasTopUi=" + hasTopUi + " for pid=" + pid);
                         pr.hasTopUi = hasTopUi;
                         changed = true;
                     }
@@ -19189,10 +19190,14 @@ public final class ActivityManagerService extends ActivityManagerNative
             // facilitate this, here we need to determine whether or not it
             // is currently showing UI.
             app.systemNoUi = true;
-            if (app == TOP_APP || app.hasTopUi) {
+            if (app == TOP_APP) {
                 app.systemNoUi = false;
                 app.curSchedGroup = ProcessList.SCHED_GROUP_TOP_APP;
                 app.adjType = "pers-top-activity";
+            } else if (app.hasTopUi) {
+                app.systemNoUi = false;
+                app.curSchedGroup = ProcessList.SCHED_GROUP_TOP_APP;
+                app.adjType = "pers-top-ui";
             } else if (activitiesSize > 0) {
                 for (int j = 0; j < activitiesSize; j++) {
                     final ActivityRecord r = app.activities.get(j);
@@ -19218,7 +19223,7 @@ public final class ActivityManagerService extends ActivityManagerNative
         int procState;
         boolean foregroundActivities = false;
         BroadcastQueue queue;
-        if (app == TOP_APP || app.hasTopUi) {
+        if (app == TOP_APP) {
             // The last app on the list is the foreground app.
             adj = ProcessList.FOREGROUND_APP_ADJ;
             schedGroup = ProcessList.SCHED_GROUP_TOP_APP;
index e74b3a3..3fffefb 100644 (file)
@@ -436,6 +436,9 @@ final class ProcessRecord {
                 pw.print(prefix); pw.print("  - "); pw.println(receivers.valueAt(i));
             }
         }
+        if (hasTopUi) {
+            pw.print(prefix); pw.print("hasTopUi="); pw.print(hasTopUi);
+        }
     }
 
     ProcessRecord(BatteryStatsImpl _batteryStats, ApplicationInfo _info,