Merge "Changed the cached threshold that decides when to defer bcasts." into udc-dev am: dea20a433c am: c907c02a72

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/23705814

Change-Id: I2e7008ecfb2c0cb99a242bf1e21f2687e1af8432
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Sudheer Shanka
2023-06-15 20:21:50 +00:00
committed by Automerger Merge Worker
2 changed files with 40 additions and 13 deletions

View File

@@ -1608,11 +1608,15 @@ class BroadcastQueueModernImpl extends BroadcastQueue {
refreshProcessQueuesLocked(uid); refreshProcessQueuesLocked(uid);
} }
} }
}, ActivityManager.UID_OBSERVER_PROCSTATE,
ActivityManager.PROCESS_STATE_TOP, "android");
mService.registerUidObserver(new UidObserver() {
@Override @Override
public void onUidCachedChanged(int uid, boolean cached) { public void onUidStateChanged(int uid, int procState, long procStateSeq,
int capability) {
synchronized (mService) { synchronized (mService) {
if (cached) { if (procState > ActivityManager.PROCESS_STATE_LAST_ACTIVITY) {
mUidCached.put(uid, true); mUidCached.put(uid, true);
} else { } else {
mUidCached.delete(uid); mUidCached.delete(uid);
@@ -1620,8 +1624,8 @@ class BroadcastQueueModernImpl extends BroadcastQueue {
refreshProcessQueuesLocked(uid); refreshProcessQueuesLocked(uid);
} }
} }
}, ActivityManager.UID_OBSERVER_PROCSTATE | ActivityManager.UID_OBSERVER_CACHED, }, ActivityManager.UID_OBSERVER_PROCSTATE,
ActivityManager.PROCESS_STATE_TOP, "android"); ActivityManager.PROCESS_STATE_LAST_ACTIVITY, "android");
// Kick off periodic health checks // Kick off periodic health checks
mLocalHandler.sendEmptyMessage(MSG_CHECK_HEALTH); mLocalHandler.sendEmptyMessage(MSG_CHECK_HEALTH);

View File

@@ -172,6 +172,7 @@ public class BroadcastQueueTest {
BroadcastConstants mConstants; BroadcastConstants mConstants;
private BroadcastSkipPolicy mSkipPolicy; private BroadcastSkipPolicy mSkipPolicy;
private UidObserver mUidObserver; private UidObserver mUidObserver;
private UidObserver mUidCachedStateObserver;
/** /**
* Desired behavior of the next * Desired behavior of the next
@@ -317,7 +318,13 @@ public class BroadcastQueueTest {
doAnswer((invocation) -> { doAnswer((invocation) -> {
mUidObserver = invocation.getArgument(0); mUidObserver = invocation.getArgument(0);
return null; return null;
}).when(mAms).registerUidObserver(any(), anyInt(), anyInt(), any()); }).when(mAms).registerUidObserver(any(), anyInt(),
eq(ActivityManager.PROCESS_STATE_TOP), any());
doAnswer((invocation) -> {
mUidCachedStateObserver = invocation.getArgument(0);
return null;
}).when(mAms).registerUidObserver(any(), anyInt(),
eq(ActivityManager.PROCESS_STATE_LAST_ACTIVITY), any());
mConstants = new BroadcastConstants(Settings.Global.BROADCAST_FG_CONSTANTS); mConstants = new BroadcastConstants(Settings.Global.BROADCAST_FG_CONSTANTS);
mConstants.TIMEOUT = 100; mConstants.TIMEOUT = 100;
@@ -1762,8 +1769,12 @@ public class BroadcastQueueTest {
final ProcessRecord receiverYellowApp = makeActiveProcessRecord(PACKAGE_YELLOW); final ProcessRecord receiverYellowApp = makeActiveProcessRecord(PACKAGE_YELLOW);
final ProcessRecord receiverOrangeApp = makeActiveProcessRecord(PACKAGE_ORANGE); final ProcessRecord receiverOrangeApp = makeActiveProcessRecord(PACKAGE_ORANGE);
mUidObserver.onUidCachedChanged(getUidForPackage(PACKAGE_GREEN), true); mUidCachedStateObserver.onUidStateChanged(getUidForPackage(PACKAGE_GREEN),
mUidObserver.onUidCachedChanged(getUidForPackage(PACKAGE_BLUE), true); ActivityManager.PROCESS_STATE_CACHED_ACTIVITY, 0,
ActivityManager.PROCESS_CAPABILITY_NONE);
mUidCachedStateObserver.onUidStateChanged(getUidForPackage(PACKAGE_BLUE),
ActivityManager.PROCESS_STATE_CACHED_EMPTY, 0,
ActivityManager.PROCESS_CAPABILITY_NONE);
final Intent timeTick = new Intent(Intent.ACTION_TIME_TICK); final Intent timeTick = new Intent(Intent.ACTION_TIME_TICK);
final BroadcastOptions opts = BroadcastOptions.makeBasic() final BroadcastOptions opts = BroadcastOptions.makeBasic()
@@ -1807,12 +1818,16 @@ public class BroadcastQueueTest {
eq(UserHandle.USER_SYSTEM), anyInt(), anyInt(), any()); eq(UserHandle.USER_SYSTEM), anyInt(), anyInt(), any());
// Shift blue to be active and confirm that deferred broadcast is delivered // Shift blue to be active and confirm that deferred broadcast is delivered
mUidObserver.onUidCachedChanged(getUidForPackage(PACKAGE_BLUE), false); mUidCachedStateObserver.onUidStateChanged(getUidForPackage(PACKAGE_BLUE),
ActivityManager.PROCESS_STATE_TOP, 0,
ActivityManager.PROCESS_CAPABILITY_NONE);
waitForIdle(); waitForIdle();
verifyScheduleRegisteredReceiver(times(1), receiverBlueApp, timeTick); verifyScheduleRegisteredReceiver(times(1), receiverBlueApp, timeTick);
// Shift green to be active and confirm that deferred broadcast is delivered // Shift green to be active and confirm that deferred broadcast is delivered
mUidObserver.onUidCachedChanged(getUidForPackage(PACKAGE_GREEN), false); mUidCachedStateObserver.onUidStateChanged(getUidForPackage(PACKAGE_GREEN),
ActivityManager.PROCESS_STATE_SERVICE, 0,
ActivityManager.PROCESS_CAPABILITY_NONE);
waitForIdle(); waitForIdle();
verifyScheduleRegisteredReceiver(times(1), receiverGreenApp, timeTick); verifyScheduleRegisteredReceiver(times(1), receiverGreenApp, timeTick);
} }
@@ -2237,9 +2252,15 @@ public class BroadcastQueueTest {
final ProcessRecord receiverBlueApp = makeActiveProcessRecord(PACKAGE_BLUE); final ProcessRecord receiverBlueApp = makeActiveProcessRecord(PACKAGE_BLUE);
final ProcessRecord receiverYellowApp = makeActiveProcessRecord(PACKAGE_YELLOW); final ProcessRecord receiverYellowApp = makeActiveProcessRecord(PACKAGE_YELLOW);
mUidObserver.onUidCachedChanged(getUidForPackage(PACKAGE_GREEN), true); mUidCachedStateObserver.onUidStateChanged(getUidForPackage(PACKAGE_GREEN),
mUidObserver.onUidCachedChanged(getUidForPackage(PACKAGE_BLUE), true); ActivityManager.PROCESS_STATE_CACHED_ACTIVITY, 0,
mUidObserver.onUidCachedChanged(getUidForPackage(PACKAGE_YELLOW), false); ActivityManager.PROCESS_CAPABILITY_NONE);
mUidCachedStateObserver.onUidStateChanged(getUidForPackage(PACKAGE_BLUE),
ActivityManager.PROCESS_STATE_CACHED_EMPTY, 0,
ActivityManager.PROCESS_CAPABILITY_NONE);
mUidCachedStateObserver.onUidStateChanged(getUidForPackage(PACKAGE_YELLOW),
ActivityManager.PROCESS_STATE_SERVICE, 0,
ActivityManager.PROCESS_CAPABILITY_NONE);
final Intent airplane = new Intent(Intent.ACTION_AIRPLANE_MODE_CHANGED); final Intent airplane = new Intent(Intent.ACTION_AIRPLANE_MODE_CHANGED);
final BroadcastOptions opts = BroadcastOptions.makeBasic() final BroadcastOptions opts = BroadcastOptions.makeBasic()
@@ -2262,7 +2283,9 @@ public class BroadcastQueueTest {
verifyScheduleRegisteredReceiver(times(1), receiverYellowApp, airplane); verifyScheduleRegisteredReceiver(times(1), receiverYellowApp, airplane);
// Shift green to be active and confirm that deferred broadcast is delivered // Shift green to be active and confirm that deferred broadcast is delivered
mUidObserver.onUidCachedChanged(getUidForPackage(PACKAGE_GREEN), false); mUidCachedStateObserver.onUidStateChanged(getUidForPackage(PACKAGE_GREEN),
ActivityManager.PROCESS_STATE_TOP_SLEEPING, 0,
ActivityManager.PROCESS_CAPABILITY_NONE);
waitForIdle(); waitForIdle();
verifyScheduleRegisteredReceiver(times(1), receiverGreenApp, airplane); verifyScheduleRegisteredReceiver(times(1), receiverGreenApp, airplane);
} }