diff options
| -rw-r--r-- | packages/SystemUI/src/com/android/systemui/doze/DozeLog.java | 5 | ||||
| -rw-r--r-- | packages/SystemUI/src/com/android/systemui/doze/DozeUi.java | 16 |
2 files changed, 21 insertions, 0 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/doze/DozeLog.java b/packages/SystemUI/src/com/android/systemui/doze/DozeLog.java index 870d4d1c6a9d..90e1c0723945 100644 --- a/packages/SystemUI/src/com/android/systemui/doze/DozeLog.java +++ b/packages/SystemUI/src/com/android/systemui/doze/DozeLog.java @@ -145,6 +145,11 @@ public class DozeLog { log("screenOff why=" + why); } + public static void traceMissedTick(String delay) { + if (!ENABLED) return; + log("missedTick by=" + delay); + } + public static void traceKeyguard(boolean showing) { if (!ENABLED) return; log("keyguard " + showing); diff --git a/packages/SystemUI/src/com/android/systemui/doze/DozeUi.java b/packages/SystemUI/src/com/android/systemui/doze/DozeUi.java index 6098a20a0c64..03076cc4b7a8 100644 --- a/packages/SystemUI/src/com/android/systemui/doze/DozeUi.java +++ b/packages/SystemUI/src/com/android/systemui/doze/DozeUi.java @@ -20,6 +20,8 @@ import android.app.AlarmManager; import android.content.Context; import android.os.Handler; import android.os.SystemClock; +import android.text.format.Formatter; +import android.util.Log; import com.android.systemui.util.wakelock.WakeLock; @@ -31,6 +33,7 @@ import java.util.GregorianCalendar; */ public class DozeUi implements DozeMachine.Part { + private static final long TIME_TICK_DEADLINE_MILLIS = 90 * 1000; // 1.5min private final Context mContext; private final AlarmManager mAlarmManager; private final DozeHost mHost; @@ -40,6 +43,7 @@ public class DozeUi implements DozeMachine.Part { private final AlarmManager.OnAlarmListener mTimeTick; private boolean mTimeTickScheduled = false; + private long mLastTimeTickElapsed = 0; public DozeUi(Context context, AlarmManager alarmManager, DozeMachine machine, WakeLock wakeLock, DozeHost host, Handler handler) { @@ -103,15 +107,26 @@ public class DozeUi implements DozeMachine.Part { SystemClock.elapsedRealtime() + delta, "doze_time_tick", mTimeTick, mHandler); mTimeTickScheduled = true; + mLastTimeTickElapsed = SystemClock.elapsedRealtime(); } private void unscheduleTimeTick() { if (!mTimeTickScheduled) { return; } + verifyLastTimeTick(); mAlarmManager.cancel(mTimeTick); } + private void verifyLastTimeTick() { + long millisSinceLastTick = SystemClock.elapsedRealtime() - mLastTimeTickElapsed; + if (millisSinceLastTick > TIME_TICK_DEADLINE_MILLIS) { + String delay = Formatter.formatShortElapsedTime(mContext, millisSinceLastTick); + DozeLog.traceMissedTick(delay); + Log.e(DozeMachine.TAG, "Missed AOD time tick by " + delay); + } + } + private long roundToNextMinute(long timeInMillis) { Calendar calendar = GregorianCalendar.getInstance(); calendar.setTimeInMillis(timeInMillis); @@ -127,6 +142,7 @@ public class DozeUi implements DozeMachine.Part { // Alarm was canceled, but we still got the callback. Ignore. return; } + verifyLastTimeTick(); mHost.dozeTimeTick(); |