Loading services/core/java/com/android/server/AlarmManagerService.java +22 −2 Original line number Diff line number Diff line Loading @@ -32,7 +32,6 @@ import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.content.pm.ApplicationInfo; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; import android.content.pm.PermissionInfo; Loading Loading @@ -85,6 +84,7 @@ import static android.app.AlarmManager.RTC; import static android.app.AlarmManager.ELAPSED_REALTIME_WAKEUP; import static android.app.AlarmManager.ELAPSED_REALTIME; import com.android.internal.annotations.GuardedBy; import com.android.internal.util.DumpUtils; import com.android.internal.util.LocalLog; Loading Loading @@ -1567,6 +1567,8 @@ class AlarmManagerService extends SystemService { pw.println(); pw.print(" Broadcast ref count: "); pw.println(mBroadcastRefCount); pw.print(" PendingIntent send/finish count: "); pw.println(mSendCount); pw.print(" Listener send/complete count: "); pw.println(mListenerCount); pw.println(); if (mInFlight.size() > 0) { Loading Loading @@ -2939,7 +2941,18 @@ class AlarmManagerService extends SystemService { return bs; } /** * Canonical count of (operation.send() - onSendFinished()) and * listener send/complete/timeout invocations. * Guarded by the usual lock. */ @GuardedBy("mLock") private int mSendCount = 0; @GuardedBy("mLock") private int mListenerCount = 0; class DeliveryTracker extends IAlarmCompleteListener.Stub implements PendingIntent.OnFinished { private InFlight removeLocked(PendingIntent pi, Intent intent) { for (int i = 0; i < mInFlight.size(); i++) { if (mInFlight.get(i).mPendingIntent == pi) { Loading Loading @@ -3026,7 +3039,7 @@ class AlarmManagerService extends SystemService { @Override public void alarmComplete(IBinder who) { if (who == null) { Slog.w(TAG, "Invalid alarmComplete: uid=" + Binder.getCallingUid() mLog.w("Invalid alarmComplete: uid=" + Binder.getCallingUid() + " pid=" + Binder.getCallingPid()); return; } Loading @@ -3041,6 +3054,7 @@ class AlarmManagerService extends SystemService { Slog.i(TAG, "alarmComplete() from " + who); } updateTrackingLocked(inflight); mListenerCount--; } else { // Delivery timed out, and the timeout handling already took care of // updating our tracking here, so we needn't do anything further. Loading @@ -3061,6 +3075,7 @@ class AlarmManagerService extends SystemService { public void onSendFinished(PendingIntent pi, Intent intent, int resultCode, String resultData, Bundle resultExtras) { synchronized (mLock) { mSendCount--; updateTrackingLocked(removeLocked(pi, intent)); } } Loading @@ -3077,10 +3092,12 @@ class AlarmManagerService extends SystemService { Slog.i(TAG, "Alarm listener " + who + " timed out in delivery"); } updateTrackingLocked(inflight); mListenerCount--; } else { if (DEBUG_LISTENER_CALLBACK) { Slog.i(TAG, "Spurious timeout of listener " + who); } mLog.w("Spurious timeout of listener " + who); } } } Loading @@ -3091,6 +3108,7 @@ class AlarmManagerService extends SystemService { public void deliverLocked(Alarm alarm, long nowELAPSED, boolean allowWhileIdle) { if (alarm.operation != null) { // PendingIntent alarm mSendCount++; try { alarm.operation.send(getContext(), 0, mBackgroundIntent.putExtra( Loading @@ -3107,10 +3125,12 @@ class AlarmManagerService extends SystemService { // 'finished' callback won't be invoked. We also don't need // to do any wakelock or stats tracking, so we have nothing // left to do here but go on to the next thing. mSendCount--; return; } } else { // Direct listener callback alarm mListenerCount++; try { if (DEBUG_LISTENER_CALLBACK) { Slog.v(TAG, "Alarm to uid=" + alarm.uid Loading Loading
services/core/java/com/android/server/AlarmManagerService.java +22 −2 Original line number Diff line number Diff line Loading @@ -32,7 +32,6 @@ import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.content.pm.ApplicationInfo; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; import android.content.pm.PermissionInfo; Loading Loading @@ -85,6 +84,7 @@ import static android.app.AlarmManager.RTC; import static android.app.AlarmManager.ELAPSED_REALTIME_WAKEUP; import static android.app.AlarmManager.ELAPSED_REALTIME; import com.android.internal.annotations.GuardedBy; import com.android.internal.util.DumpUtils; import com.android.internal.util.LocalLog; Loading Loading @@ -1567,6 +1567,8 @@ class AlarmManagerService extends SystemService { pw.println(); pw.print(" Broadcast ref count: "); pw.println(mBroadcastRefCount); pw.print(" PendingIntent send/finish count: "); pw.println(mSendCount); pw.print(" Listener send/complete count: "); pw.println(mListenerCount); pw.println(); if (mInFlight.size() > 0) { Loading Loading @@ -2939,7 +2941,18 @@ class AlarmManagerService extends SystemService { return bs; } /** * Canonical count of (operation.send() - onSendFinished()) and * listener send/complete/timeout invocations. * Guarded by the usual lock. */ @GuardedBy("mLock") private int mSendCount = 0; @GuardedBy("mLock") private int mListenerCount = 0; class DeliveryTracker extends IAlarmCompleteListener.Stub implements PendingIntent.OnFinished { private InFlight removeLocked(PendingIntent pi, Intent intent) { for (int i = 0; i < mInFlight.size(); i++) { if (mInFlight.get(i).mPendingIntent == pi) { Loading Loading @@ -3026,7 +3039,7 @@ class AlarmManagerService extends SystemService { @Override public void alarmComplete(IBinder who) { if (who == null) { Slog.w(TAG, "Invalid alarmComplete: uid=" + Binder.getCallingUid() mLog.w("Invalid alarmComplete: uid=" + Binder.getCallingUid() + " pid=" + Binder.getCallingPid()); return; } Loading @@ -3041,6 +3054,7 @@ class AlarmManagerService extends SystemService { Slog.i(TAG, "alarmComplete() from " + who); } updateTrackingLocked(inflight); mListenerCount--; } else { // Delivery timed out, and the timeout handling already took care of // updating our tracking here, so we needn't do anything further. Loading @@ -3061,6 +3075,7 @@ class AlarmManagerService extends SystemService { public void onSendFinished(PendingIntent pi, Intent intent, int resultCode, String resultData, Bundle resultExtras) { synchronized (mLock) { mSendCount--; updateTrackingLocked(removeLocked(pi, intent)); } } Loading @@ -3077,10 +3092,12 @@ class AlarmManagerService extends SystemService { Slog.i(TAG, "Alarm listener " + who + " timed out in delivery"); } updateTrackingLocked(inflight); mListenerCount--; } else { if (DEBUG_LISTENER_CALLBACK) { Slog.i(TAG, "Spurious timeout of listener " + who); } mLog.w("Spurious timeout of listener " + who); } } } Loading @@ -3091,6 +3108,7 @@ class AlarmManagerService extends SystemService { public void deliverLocked(Alarm alarm, long nowELAPSED, boolean allowWhileIdle) { if (alarm.operation != null) { // PendingIntent alarm mSendCount++; try { alarm.operation.send(getContext(), 0, mBackgroundIntent.putExtra( Loading @@ -3107,10 +3125,12 @@ class AlarmManagerService extends SystemService { // 'finished' callback won't be invoked. We also don't need // to do any wakelock or stats tracking, so we have nothing // left to do here but go on to the next thing. mSendCount--; return; } } else { // Direct listener callback alarm mListenerCount++; try { if (DEBUG_LISTENER_CALLBACK) { Slog.v(TAG, "Alarm to uid=" + alarm.uid Loading