Revert "Always re-establish kernel alarms when considering new alarm set"
This reverts commitc83d3e4b72. While the above patch does help deal with the issue of "lost" kernel alarms, experiments found it to also cause the unnecessary duplicate setting of non-lost alarms in other devices. This leads to a situation where the CPU constantly tries to sleep, but occasionally keeps failing to do so, because of a collection of these duplicate alarms constantly activating the "alarm" kernel wakeup source , presumably due to them being triggered. These might have accumulated over several iterations when the kernel alarms were set again (via rescheduleKernelAlarmsLocked()). To prevent the CPU thrashing (which heavily drains power on more battery-constrained devices, and increases the number of alarms being set), the aforementioned commit is backed out. Change-Id: I2a189cb303deb78a2faf476b0e789445407f3e11 (cherry picked from commitd19ffd4f2c)
This commit is contained in:
@@ -1230,8 +1230,7 @@ class AlarmManagerService extends SystemService {
|
||||
if (mAlarmBatches.size() > 0) {
|
||||
final Batch firstWakeup = findFirstWakeupBatchLocked();
|
||||
final Batch firstBatch = mAlarmBatches.get(0);
|
||||
// always update the kernel alarms, as a backstop against missed wakeups
|
||||
if (firstWakeup != null) {
|
||||
if (firstWakeup != null && mNextWakeup != firstWakeup.start) {
|
||||
mNextWakeup = firstWakeup.start;
|
||||
setLocked(ELAPSED_REALTIME_WAKEUP, firstWakeup.start);
|
||||
}
|
||||
@@ -1244,8 +1243,7 @@ class AlarmManagerService extends SystemService {
|
||||
nextNonWakeup = mNextNonWakeupDeliveryTime;
|
||||
}
|
||||
}
|
||||
// always update the kernel alarm, as a backstop against missed wakeups
|
||||
if (nextNonWakeup != 0) {
|
||||
if (nextNonWakeup != 0 && mNextNonWakeup != nextNonWakeup) {
|
||||
mNextNonWakeup = nextNonWakeup;
|
||||
setLocked(ELAPSED_REALTIME, nextNonWakeup);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user