diff options
author | 2025-02-23 13:09:32 -0800 | |
---|---|---|
committer | 2025-02-23 13:09:32 -0800 | |
commit | a53e1e89b47f5519b4077221ad243f5101f1dcb8 (patch) | |
tree | 5ff5ba95fbdf27023b218610c062b948eb3dcd5d | |
parent | 8dea4977bc267da81874809de279e50d593a927e (diff) | |
parent | caea55101151f47a33c955b00c685edcc4494c4b (diff) |
Merge "Release alarm wakelock if send fails" into main
-rw-r--r-- | apex/jobscheduler/service/java/com/android/server/alarm/AlarmManagerService.java | 6 | ||||
-rw-r--r-- | services/tests/mockingservicestests/src/com/android/server/alarm/AlarmManagerServiceTest.java | 35 |
2 files changed, 41 insertions, 0 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 f89b13dce307..0298c1e627ee 100644 --- a/apex/jobscheduler/service/java/com/android/server/alarm/AlarmManagerService.java +++ b/apex/jobscheduler/service/java/com/android/server/alarm/AlarmManagerService.java @@ -5367,6 +5367,9 @@ public class AlarmManagerService extends SystemService { // to do any wakelock or stats tracking, so we have nothing // left to do here but go on to the next thing. mSendFinishCount++; + if (Flags.acquireWakelockBeforeSend()) { + mWakeLock.release(); + } return; } } else { @@ -5404,6 +5407,9 @@ public class AlarmManagerService extends SystemService { // stats management to do. It threw before we posted the delayed // timeout message, so we're done here. mListenerFinishCount++; + if (Flags.acquireWakelockBeforeSend()) { + mWakeLock.release(); + } return; } } diff --git a/services/tests/mockingservicestests/src/com/android/server/alarm/AlarmManagerServiceTest.java b/services/tests/mockingservicestests/src/com/android/server/alarm/AlarmManagerServiceTest.java index cb52f1849b5b..2a513ae3a8e8 100644 --- a/services/tests/mockingservicestests/src/com/android/server/alarm/AlarmManagerServiceTest.java +++ b/services/tests/mockingservicestests/src/com/android/server/alarm/AlarmManagerServiceTest.java @@ -974,6 +974,41 @@ public final class AlarmManagerServiceTest { } @Test + @EnableFlags(Flags.FLAG_ACQUIRE_WAKELOCK_BEFORE_SEND) + public void testWakelockReleasedWhenSendFails() throws Exception { + final long triggerTime = mNowElapsedTest + 5000; + final PendingIntent alarmPi = getNewMockPendingIntent(); + setTestAlarm(ELAPSED_REALTIME_WAKEUP, triggerTime, alarmPi); + + doThrow(new PendingIntent.CanceledException("test")).when(alarmPi).send(eq(mMockContext), + eq(0), any(Intent.class), any(), any(Handler.class), isNull(), any()); + + mNowElapsedTest = mTestTimer.getElapsed(); + mTestTimer.expire(); + + final InOrder inOrder = Mockito.inOrder(mWakeLock); + inOrder.verify(mWakeLock).acquire(); + inOrder.verify(mWakeLock).release(); + } + + @Test + @EnableFlags(Flags.FLAG_ACQUIRE_WAKELOCK_BEFORE_SEND) + public void testWakelockReleasedOnListenerException() throws Exception { + final long triggerTime = mNowElapsedTest + 5000; + final IAlarmListener listener = getNewListener(() -> { + throw new RuntimeException("test"); + }); + setTestAlarmWithListener(ELAPSED_REALTIME_WAKEUP, triggerTime, listener); + + mNowElapsedTest = mTestTimer.getElapsed(); + mTestTimer.expire(); + + final InOrder inOrder = Mockito.inOrder(mWakeLock); + inOrder.verify(mWakeLock).acquire(); + inOrder.verify(mWakeLock).release(); + } + + @Test public void testMinFuturityCoreUid() { setDeviceConfigLong(KEY_MIN_FUTURITY, 10L); assertEquals(10, mService.mConstants.MIN_FUTURITY); |