Merge "Add local logs to NetworkTimeUpdateService"

This commit is contained in:
Kanyinsola Fapohunda
2022-02-28 12:52:49 +00:00
committed by Gerrit Code Review
2 changed files with 43 additions and 4 deletions

View File

@@ -81,7 +81,16 @@ public class NtpTrustedTime implements TrustedTime {
/** Calculates and returns the age of this result. */ /** Calculates and returns the age of this result. */
public long getAgeMillis() { public long getAgeMillis() {
return SystemClock.elapsedRealtime() - mElapsedRealtimeMillis; return getAgeMillis(SystemClock.elapsedRealtime());
}
/**
* Calculates and returns the age of this result relative to currentElapsedRealtimeMillis.
*
* @param currentElapsedRealtimeMillis - reference elapsed real time
*/
public long getAgeMillis(long currentElapsedRealtimeMillis) {
return currentElapsedRealtimeMillis - mElapsedRealtimeMillis;
} }
@Override @Override

View File

@@ -16,6 +16,7 @@
package com.android.server; package com.android.server;
import android.annotation.NonNull;
import android.app.AlarmManager; import android.app.AlarmManager;
import android.app.PendingIntent; import android.app.PendingIntent;
import android.app.timedetector.NetworkTimeSuggestion; import android.app.timedetector.NetworkTimeSuggestion;
@@ -38,6 +39,7 @@ import android.os.PowerManager;
import android.os.SystemClock; import android.os.SystemClock;
import android.os.TimestampedValue; import android.os.TimestampedValue;
import android.provider.Settings; import android.provider.Settings;
import android.util.LocalLog;
import android.util.Log; import android.util.Log;
import android.util.NtpTrustedTime; import android.util.NtpTrustedTime;
import android.util.TimeUtils; import android.util.TimeUtils;
@@ -95,6 +97,13 @@ public class NetworkTimeUpdateService extends Binder {
// connection to happen. // connection to happen.
private int mTryAgainCounter; private int mTryAgainCounter;
/**
* A log that records the decisions to fetch a network time update.
* This is logged in bug reports to assist with debugging issues with network time suggestions.
*/
@NonNull
private final LocalLog mLocalLog = new LocalLog(30, false /* useLocalTimestamps */);
public NetworkTimeUpdateService(Context context) { public NetworkTimeUpdateService(Context context) {
mContext = context; mContext = context;
mTime = NtpTrustedTime.getInstance(context); mTime = NtpTrustedTime.getInstance(context);
@@ -155,15 +164,29 @@ public class NetworkTimeUpdateService extends Binder {
} }
private void onPollNetworkTimeUnderWakeLock(int event) { private void onPollNetworkTimeUnderWakeLock(int event) {
long currentElapsedRealtimeMillis = SystemClock.elapsedRealtime();
// Force an NTP fix when outdated // Force an NTP fix when outdated
NtpTrustedTime.TimeResult cachedNtpResult = mTime.getCachedTimeResult(); NtpTrustedTime.TimeResult cachedNtpResult = mTime.getCachedTimeResult();
if (cachedNtpResult == null || cachedNtpResult.getAgeMillis() >= mPollingIntervalMs) { if (cachedNtpResult == null || cachedNtpResult.getAgeMillis(currentElapsedRealtimeMillis)
>= mPollingIntervalMs) {
if (DBG) Log.d(TAG, "Stale NTP fix; forcing refresh"); if (DBG) Log.d(TAG, "Stale NTP fix; forcing refresh");
mTime.forceRefresh(); boolean isSuccessful = mTime.forceRefresh();
if (!isSuccessful) {
String logMsg = "forceRefresh() returned false: cachedNtpResult=" + cachedNtpResult
+ ", currentElapsedRealtimeMillis=" + currentElapsedRealtimeMillis;
if (DBG) {
Log.d(TAG, logMsg);
}
mLocalLog.log(logMsg);
}
cachedNtpResult = mTime.getCachedTimeResult(); cachedNtpResult = mTime.getCachedTimeResult();
} }
if (cachedNtpResult != null && cachedNtpResult.getAgeMillis() < mPollingIntervalMs) { if (cachedNtpResult != null
&& cachedNtpResult.getAgeMillis(currentElapsedRealtimeMillis)
< mPollingIntervalMs) {
// Obtained fresh fix; schedule next normal update // Obtained fresh fix; schedule next normal update
resetAlarm(mPollingIntervalMs); resetAlarm(mPollingIntervalMs);
@@ -180,6 +203,11 @@ public class NetworkTimeUpdateService extends Binder {
resetAlarm(mPollingIntervalShorterMs); resetAlarm(mPollingIntervalShorterMs);
} else { } else {
// Try much later // Try much later
String logMsg = "mTryAgainTimesMax exceeded, cachedNtpResult=" + cachedNtpResult;
if (DBG) {
Log.d(TAG, logMsg);
}
mLocalLog.log(logMsg);
mTryAgainCounter = 0; mTryAgainCounter = 0;
resetAlarm(mPollingIntervalMs); resetAlarm(mPollingIntervalMs);
} }
@@ -285,6 +313,8 @@ public class NetworkTimeUpdateService extends Binder {
if (ntpResult != null) { if (ntpResult != null) {
pw.println("NTP result age: " + ntpResult.getAgeMillis()); pw.println("NTP result age: " + ntpResult.getAgeMillis());
} }
pw.println("Local logs:");
mLocalLog.dump(fd, pw, args);
pw.println(); pw.println();
} }
} }