Follow up for I420bee8a11d430b1e52ded050536e56a85a48800

- Log when hasTopUi state changes
- Add hasTopUi to dumpstate
- Only allow persistent processes to honor this flag

Bug: 30292998
Change-Id: Ifb481c8d50b102ea4cac3078ea3eb39e45c08259
This commit is contained in:
Jorim Jaggi
2016-07-25 17:23:39 +02:00
parent 7c731f9e1f
commit 8d4f5f52a1
3 changed files with 13 additions and 3 deletions

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

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

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