summaryrefslogtreecommitdiffstats
path: root/voip
diff options
context:
space:
mode:
authorHung-ying Tyan <tyanh@google.com>2011-06-23 18:32:59 +0800
committerHung-ying Tyan <tyanh@google.com>2011-06-23 19:23:13 +0800
commit4af085ff26fbe9e13f7002496fd505dbdb36b282 (patch)
treecc1a34715027a8c83223842b370a4f07e2190a33 /voip
parent12750701d0f90ed0166f5ddcf588c1235efe830a (diff)
downloadframeworks_base-4af085ff26fbe9e13f7002496fd505dbdb36b282.zip
frameworks_base-4af085ff26fbe9e13f7002496fd505dbdb36b282.tar.gz
frameworks_base-4af085ff26fbe9e13f7002496fd505dbdb36b282.tar.bz2
Execute all the due wakeup events in SipWakeupTimer.
Events are sorted by periods. So events of larger periods may have trigger time (i.e., when the event should be processed) earlier than the ones of smaller periods. So need to scan the whole queue looking for due events. The scan takes O(n) time but we expect the queue size to be small. Change-Id: I08bd3bd9d4bb8decb78f3c91c943396463ca023a
Diffstat (limited to 'voip')
-rw-r--r--voip/java/com/android/server/sip/SipWakeupTimer.java8
1 files changed, 5 insertions, 3 deletions
diff --git a/voip/java/com/android/server/sip/SipWakeupTimer.java b/voip/java/com/android/server/sip/SipWakeupTimer.java
index 9cc26b0..76780c0 100644
--- a/voip/java/com/android/server/sip/SipWakeupTimer.java
+++ b/voip/java/com/android/server/sip/SipWakeupTimer.java
@@ -173,7 +173,7 @@ class SipWakeupTimer extends BroadcastReceiver {
long triggerTime = event.mTriggerTime;
if (DEBUG_TIMER) {
- Log.d(TAG, " add event " + event + " scheduled at "
+ Log.d(TAG, " add event " + event + " scheduled on "
+ showTime(triggerTime) + " at " + showTime(now)
+ ", #events=" + mEventQueue.size());
printQueue();
@@ -267,10 +267,10 @@ class SipWakeupTimer extends BroadcastReceiver {
if (stopped() || mEventQueue.isEmpty()) return;
for (MyEvent event : mEventQueue) {
- if (event.mTriggerTime != triggerTime) break;
+ if (event.mTriggerTime != triggerTime) continue;
if (DEBUG_TIMER) Log.d(TAG, "execute " + event);
- event.mLastTriggerTime = event.mTriggerTime;
+ event.mLastTriggerTime = triggerTime;
event.mTriggerTime += event.mPeriod;
// run the callback in the handler thread to prevent deadlock
@@ -324,6 +324,8 @@ class SipWakeupTimer extends BroadcastReceiver {
}
}
+ // Sort the events by mMaxPeriod so that the first event can be used to
+ // align events with larger periods
private static class MyEventComparator implements Comparator<MyEvent> {
public int compare(MyEvent e1, MyEvent e2) {
if (e1 == e2) return 0;