diff options
author | 2024-07-25 00:34:57 +0000 | |
---|---|---|
committer | 2024-07-26 15:40:16 +0000 | |
commit | 49807788f0478a74b0ef084cb2f2626e087974c3 (patch) | |
tree | 95927f79845c47785f939d65dd1398b7a494de9e /apex | |
parent | 8148983150f22bcbb4973d9efb38b92bd104785d (diff) |
Only schedule wakeups when alarm is set outside of user wakeup offset
Before this change, a repeat wakeup was scheduled for the same alarm when the user was started. This caused a lot of unnecessary kernel reschedules and user start calls.
After this change, such repeat wakeups are not scheduled.
Bug: 314907186
Test: UserWakeupStoreTest
Flag: com.android.server.alarm.start_user_before_scheduled_alarms
Change-Id: I054d1814eece95ff2d79b4460c37434f4ff9a3df
Diffstat (limited to 'apex')
-rw-r--r-- | apex/jobscheduler/service/java/com/android/server/alarm/AlarmManagerService.java | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/apex/jobscheduler/service/java/com/android/server/alarm/AlarmManagerService.java b/apex/jobscheduler/service/java/com/android/server/alarm/AlarmManagerService.java index ee03e4b2ccd1..87d157e63788 100644 --- a/apex/jobscheduler/service/java/com/android/server/alarm/AlarmManagerService.java +++ b/apex/jobscheduler/service/java/com/android/server/alarm/AlarmManagerService.java @@ -4523,8 +4523,9 @@ public class AlarmManagerService extends SystemService { final int[] userIds = mUserWakeupStore.getUserIdsToWakeup(nowELAPSED); for (int i = 0; i < userIds.length; i++) { - if (!mActivityManagerInternal.startUserInBackground( - userIds[i])) { + if (mActivityManagerInternal.isUserRunning(userIds[i], 0) + || !mActivityManagerInternal.startUserInBackground( + userIds[i])) { mUserWakeupStore.removeUserWakeup(userIds[i]); } } |