Merge "Prioritize broadcasts to persistent processes." into udc-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
e546f6af3a
@@ -246,6 +246,26 @@ public class BroadcastConstants {
|
|||||||
private static final String KEY_DELAY_URGENT_MILLIS = "bcast_delay_urgent_millis";
|
private static final String KEY_DELAY_URGENT_MILLIS = "bcast_delay_urgent_millis";
|
||||||
private static final long DEFAULT_DELAY_URGENT_MILLIS = -120_000;
|
private static final long DEFAULT_DELAY_URGENT_MILLIS = -120_000;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* For {@link BroadcastQueueModernImpl}: Delay to apply to broadcasts to
|
||||||
|
* foreground processes, typically a negative value to indicate they should be
|
||||||
|
* executed before most other pending broadcasts.
|
||||||
|
*/
|
||||||
|
public long DELAY_FOREGROUND_PROC_MILLIS = DEFAULT_DELAY_FOREGROUND_PROC_MILLIS;
|
||||||
|
private static final String KEY_DELAY_FOREGROUND_PROC_MILLIS =
|
||||||
|
"bcast_delay_foreground_proc_millis";
|
||||||
|
private static final long DEFAULT_DELAY_FOREGROUND_PROC_MILLIS = -120_000;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* For {@link BroadcastQueueModernImpl}: Delay to apply to broadcasts to
|
||||||
|
* persistent processes, typically a negative value to indicate they should be
|
||||||
|
* executed before most other pending broadcasts.
|
||||||
|
*/
|
||||||
|
public long DELAY_PERSISTENT_PROC_MILLIS = DEFAULT_DELAY_FOREGROUND_PROC_MILLIS;
|
||||||
|
private static final String KEY_DELAY_PERSISTENT_PROC_MILLIS =
|
||||||
|
"bcast_delay_persistent_proc_millis";
|
||||||
|
private static final long DEFAULT_DELAY_PERSISTENT_PROC_MILLIS = -120_000;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* For {@link BroadcastQueueModernImpl}: Maximum number of complete
|
* For {@link BroadcastQueueModernImpl}: Maximum number of complete
|
||||||
* historical broadcasts to retain for debugging purposes.
|
* historical broadcasts to retain for debugging purposes.
|
||||||
@@ -411,6 +431,10 @@ public class BroadcastConstants {
|
|||||||
DEFAULT_DELAY_CACHED_MILLIS);
|
DEFAULT_DELAY_CACHED_MILLIS);
|
||||||
DELAY_URGENT_MILLIS = getDeviceConfigLong(KEY_DELAY_URGENT_MILLIS,
|
DELAY_URGENT_MILLIS = getDeviceConfigLong(KEY_DELAY_URGENT_MILLIS,
|
||||||
DEFAULT_DELAY_URGENT_MILLIS);
|
DEFAULT_DELAY_URGENT_MILLIS);
|
||||||
|
DELAY_FOREGROUND_PROC_MILLIS = getDeviceConfigLong(KEY_DELAY_FOREGROUND_PROC_MILLIS,
|
||||||
|
DEFAULT_DELAY_FOREGROUND_PROC_MILLIS);
|
||||||
|
DELAY_PERSISTENT_PROC_MILLIS = getDeviceConfigLong(KEY_DELAY_PERSISTENT_PROC_MILLIS,
|
||||||
|
DEFAULT_DELAY_PERSISTENT_PROC_MILLIS);
|
||||||
MAX_HISTORY_COMPLETE_SIZE = getDeviceConfigInt(KEY_MAX_HISTORY_COMPLETE_SIZE,
|
MAX_HISTORY_COMPLETE_SIZE = getDeviceConfigInt(KEY_MAX_HISTORY_COMPLETE_SIZE,
|
||||||
DEFAULT_MAX_HISTORY_COMPLETE_SIZE);
|
DEFAULT_MAX_HISTORY_COMPLETE_SIZE);
|
||||||
MAX_HISTORY_SUMMARY_SIZE = getDeviceConfigInt(KEY_MAX_HISTORY_SUMMARY_SIZE,
|
MAX_HISTORY_SUMMARY_SIZE = getDeviceConfigInt(KEY_MAX_HISTORY_SUMMARY_SIZE,
|
||||||
@@ -463,6 +487,10 @@ public class BroadcastConstants {
|
|||||||
TimeUtils.formatDuration(DELAY_CACHED_MILLIS)).println();
|
TimeUtils.formatDuration(DELAY_CACHED_MILLIS)).println();
|
||||||
pw.print(KEY_DELAY_URGENT_MILLIS,
|
pw.print(KEY_DELAY_URGENT_MILLIS,
|
||||||
TimeUtils.formatDuration(DELAY_URGENT_MILLIS)).println();
|
TimeUtils.formatDuration(DELAY_URGENT_MILLIS)).println();
|
||||||
|
pw.print(KEY_DELAY_FOREGROUND_PROC_MILLIS,
|
||||||
|
TimeUtils.formatDuration(DELAY_FOREGROUND_PROC_MILLIS)).println();
|
||||||
|
pw.print(KEY_DELAY_PERSISTENT_PROC_MILLIS,
|
||||||
|
TimeUtils.formatDuration(DELAY_PERSISTENT_PROC_MILLIS)).println();
|
||||||
pw.print(KEY_MAX_HISTORY_COMPLETE_SIZE, MAX_HISTORY_COMPLETE_SIZE).println();
|
pw.print(KEY_MAX_HISTORY_COMPLETE_SIZE, MAX_HISTORY_COMPLETE_SIZE).println();
|
||||||
pw.print(KEY_MAX_HISTORY_SUMMARY_SIZE, MAX_HISTORY_SUMMARY_SIZE).println();
|
pw.print(KEY_MAX_HISTORY_SUMMARY_SIZE, MAX_HISTORY_SUMMARY_SIZE).println();
|
||||||
pw.print(KEY_MAX_CONSECUTIVE_URGENT_DISPATCHES,
|
pw.print(KEY_MAX_CONSECUTIVE_URGENT_DISPATCHES,
|
||||||
|
|||||||
@@ -1098,8 +1098,11 @@ class BroadcastProcessQueue {
|
|||||||
mRunnableAt = runnableAt + constants.DELAY_URGENT_MILLIS;
|
mRunnableAt = runnableAt + constants.DELAY_URGENT_MILLIS;
|
||||||
mRunnableAtReason = REASON_INSTRUMENTED;
|
mRunnableAtReason = REASON_INSTRUMENTED;
|
||||||
} else if (mUidForeground) {
|
} else if (mUidForeground) {
|
||||||
mRunnableAt = runnableAt + constants.DELAY_URGENT_MILLIS;
|
mRunnableAt = runnableAt + constants.DELAY_FOREGROUND_PROC_MILLIS;
|
||||||
mRunnableAtReason = REASON_FOREGROUND;
|
mRunnableAtReason = REASON_FOREGROUND;
|
||||||
|
} else if (mProcessPersistent) {
|
||||||
|
mRunnableAt = runnableAt + constants.DELAY_PERSISTENT_PROC_MILLIS;
|
||||||
|
mRunnableAtReason = REASON_PERSISTENT;
|
||||||
} else if (mCountOrdered > 0) {
|
} else if (mCountOrdered > 0) {
|
||||||
mRunnableAt = runnableAt;
|
mRunnableAt = runnableAt;
|
||||||
mRunnableAtReason = REASON_CONTAINS_ORDERED;
|
mRunnableAtReason = REASON_CONTAINS_ORDERED;
|
||||||
@@ -1112,9 +1115,6 @@ class BroadcastProcessQueue {
|
|||||||
} else if (mCountManifest > 0) {
|
} else if (mCountManifest > 0) {
|
||||||
mRunnableAt = runnableAt;
|
mRunnableAt = runnableAt;
|
||||||
mRunnableAtReason = REASON_CONTAINS_MANIFEST;
|
mRunnableAtReason = REASON_CONTAINS_MANIFEST;
|
||||||
} else if (mProcessPersistent) {
|
|
||||||
mRunnableAt = runnableAt;
|
|
||||||
mRunnableAtReason = REASON_PERSISTENT;
|
|
||||||
} else if (mUidCached) {
|
} else if (mUidCached) {
|
||||||
if (r.deferUntilActive) {
|
if (r.deferUntilActive) {
|
||||||
// All enqueued broadcasts are deferrable, defer
|
// All enqueued broadcasts are deferrable, defer
|
||||||
|
|||||||
@@ -537,6 +537,30 @@ public final class BroadcastQueueModernImplTest {
|
|||||||
assertEquals(BroadcastProcessQueue.REASON_NORMAL, queue.getRunnableAtReason());
|
assertEquals(BroadcastProcessQueue.REASON_NORMAL, queue.getRunnableAtReason());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testRunnableAt_persistentProc() {
|
||||||
|
final BroadcastProcessQueue queue = new BroadcastProcessQueue(mConstants, PACKAGE_GREEN,
|
||||||
|
getUidForPackage(PACKAGE_GREEN));
|
||||||
|
|
||||||
|
final Intent timeTick = new Intent(Intent.ACTION_TIME_TICK);
|
||||||
|
final BroadcastRecord timeTickRecord = makeBroadcastRecord(timeTick,
|
||||||
|
List.of(makeMockRegisteredReceiver()));
|
||||||
|
enqueueOrReplaceBroadcast(queue, timeTickRecord, 0);
|
||||||
|
|
||||||
|
assertThat(queue.getRunnableAt()).isGreaterThan(timeTickRecord.enqueueTime);
|
||||||
|
assertEquals(BroadcastProcessQueue.REASON_NORMAL, queue.getRunnableAtReason());
|
||||||
|
|
||||||
|
doReturn(true).when(mProcess).isPersistent();
|
||||||
|
queue.setProcessAndUidState(mProcess, false, false);
|
||||||
|
assertThat(queue.getRunnableAt()).isLessThan(timeTickRecord.enqueueTime);
|
||||||
|
assertEquals(BroadcastProcessQueue.REASON_PERSISTENT, queue.getRunnableAtReason());
|
||||||
|
|
||||||
|
doReturn(false).when(mProcess).isPersistent();
|
||||||
|
queue.setProcessAndUidState(mProcess, false, false);
|
||||||
|
assertThat(queue.getRunnableAt()).isGreaterThan(timeTickRecord.enqueueTime);
|
||||||
|
assertEquals(BroadcastProcessQueue.REASON_NORMAL, queue.getRunnableAtReason());
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Verify that a cached process that would normally be delayed becomes
|
* Verify that a cached process that would normally be delayed becomes
|
||||||
* immediately runnable when the given broadcast is enqueued.
|
* immediately runnable when the given broadcast is enqueued.
|
||||||
|
|||||||
Reference in New Issue
Block a user