Prioritize delivering broadcasts to apps with fg activities.
Bug: 275594411 Bug: 275767820 Test: atest FrameworksMockingServicesTests:BroadcastQueueTest Test: atest FrameworksMockingServicesTests:BroadcastQueueModernImplTest Change-Id: I13444844307e2e36fbb1a38aa609121b4c2b7b81
This commit is contained in:
@@ -860,6 +860,7 @@ class BroadcastProcessQueue {
|
||||
static final int REASON_CONTAINS_RESULT_TO = 15;
|
||||
static final int REASON_CONTAINS_INSTRUMENTED = 16;
|
||||
static final int REASON_CONTAINS_MANIFEST = 17;
|
||||
static final int REASON_FOREGROUND_ACTIVITIES = 18;
|
||||
|
||||
@IntDef(flag = false, prefix = { "REASON_" }, value = {
|
||||
REASON_EMPTY,
|
||||
@@ -879,6 +880,7 @@ class BroadcastProcessQueue {
|
||||
REASON_CONTAINS_RESULT_TO,
|
||||
REASON_CONTAINS_INSTRUMENTED,
|
||||
REASON_CONTAINS_MANIFEST,
|
||||
REASON_FOREGROUND_ACTIVITIES,
|
||||
})
|
||||
@Retention(RetentionPolicy.SOURCE)
|
||||
public @interface Reason {}
|
||||
@@ -902,6 +904,7 @@ class BroadcastProcessQueue {
|
||||
case REASON_CONTAINS_RESULT_TO: return "CONTAINS_RESULT_TO";
|
||||
case REASON_CONTAINS_INSTRUMENTED: return "CONTAINS_INSTRUMENTED";
|
||||
case REASON_CONTAINS_MANIFEST: return "CONTAINS_MANIFEST";
|
||||
case REASON_FOREGROUND_ACTIVITIES: return "FOREGROUND_ACTIVITIES";
|
||||
default: return Integer.toString(reason);
|
||||
}
|
||||
}
|
||||
@@ -959,6 +962,11 @@ class BroadcastProcessQueue {
|
||||
} else if (mProcessInstrumented) {
|
||||
mRunnableAt = runnableAt + constants.DELAY_URGENT_MILLIS;
|
||||
mRunnableAtReason = REASON_INSTRUMENTED;
|
||||
} else if (app != null && app.hasForegroundActivities()) {
|
||||
// TODO: Listen for uid state changes to check when an uid goes in and out of
|
||||
// the TOP state.
|
||||
mRunnableAt = runnableAt + constants.DELAY_URGENT_MILLIS;
|
||||
mRunnableAtReason = REASON_FOREGROUND_ACTIVITIES;
|
||||
} else if (mCountOrdered > 0) {
|
||||
mRunnableAt = runnableAt;
|
||||
mRunnableAtReason = REASON_CONTAINS_ORDERED;
|
||||
|
||||
@@ -1050,6 +1050,11 @@ class ProcessRecord implements WindowProcessListener {
|
||||
return mState.isCached();
|
||||
}
|
||||
|
||||
@GuardedBy(anyOf = {"mService", "mProcLock"})
|
||||
public boolean hasForegroundActivities() {
|
||||
return mState.hasForegroundActivities();
|
||||
}
|
||||
|
||||
boolean hasActivities() {
|
||||
return mWindowProcessController.hasActivities();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user