DO NOT MERGE ANYWHERE Revert "Always re-establish kernel alarms when considering new alarm set"

This reverts commit c83d3e4b72.

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.

Bug: 20136729
Change-Id: I2a189cb303deb78a2faf476b0e789445407f3e11
This commit is contained in:
Prashant Malani
2015-06-10 17:43:49 -07:00
parent 0eeb3bb8eb
commit d19ffd4f2c

View File

@@ -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);
}