summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Suprabh Shukla <suprabh@google.com> 2025-02-23 13:09:32 -0800
committer Android (Google) Code Review <android-gerrit@google.com> 2025-02-23 13:09:32 -0800
commita53e1e89b47f5519b4077221ad243f5101f1dcb8 (patch)
tree5ff5ba95fbdf27023b218610c062b948eb3dcd5d
parent8dea4977bc267da81874809de279e50d593a927e (diff)
parentcaea55101151f47a33c955b00c685edcc4494c4b (diff)
Merge "Release alarm wakelock if send fails" into main
-rw-r--r--apex/jobscheduler/service/java/com/android/server/alarm/AlarmManagerService.java6
-rw-r--r--services/tests/mockingservicestests/src/com/android/server/alarm/AlarmManagerServiceTest.java35
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);