diff options
| -rw-r--r-- | services/core/java/com/android/server/content/SyncJobService.java | 32 |
1 files changed, 27 insertions, 5 deletions
diff --git a/services/core/java/com/android/server/content/SyncJobService.java b/services/core/java/com/android/server/content/SyncJobService.java index d957ca054819..40a93c1c2808 100644 --- a/services/core/java/com/android/server/content/SyncJobService.java +++ b/services/core/java/com/android/server/content/SyncJobService.java @@ -22,10 +22,12 @@ import android.content.Intent; import android.os.Message; import android.os.Messenger; import android.os.RemoteException; +import android.os.SystemClock; import android.util.Log; import android.util.Slog; import android.util.SparseArray; import android.util.SparseBooleanArray; +import android.util.SparseLongArray; import com.android.internal.annotations.GuardedBy; @@ -44,6 +46,9 @@ public class SyncJobService extends JobService { @GuardedBy("mLock") private final SparseBooleanArray mStartedSyncs = new SparseBooleanArray(); + @GuardedBy("mLock") + private final SparseLongArray mJobStartUptimes = new SparseLongArray(); + private final SyncLogger mLogger = SyncLogger.getInstance(); /** @@ -82,7 +87,9 @@ public class SyncJobService extends JobService { synchronized (mLock) { final int jobId = params.getJobId(); mJobParamsMap.put(jobId, params); + mStartedSyncs.delete(jobId); + mJobStartUptimes.put(jobId, SystemClock.uptimeMillis()); } Message m = Message.obtain(); m.what = SyncManager.SyncHandler.MESSAGE_START_SYNC; @@ -113,14 +120,24 @@ public class SyncJobService extends JobService { final int jobId = params.getJobId(); mJobParamsMap.remove(jobId); - if (!mStartedSyncs.get(jobId)) { - final String message = "Job " + jobId + " didn't start: params=" + - jobParametersToString(params); - mLogger.log(message); - Slog.wtf(TAG, message); + final long startUptime = mJobStartUptimes.get(jobId); + final long nowUptime = SystemClock.uptimeMillis(); + if (startUptime == 0) { + wtf("Job " + jobId + " start uptime not found: " + + " params=" + jobParametersToString(params)); + } else if ((nowUptime - startUptime) > 60 * 1000) { + // WTF if startSyncH() hasn't happened, *unless* onStopJob() was called too soon. + // (1 minute threshold.) + if (!mStartedSyncs.get(jobId)) { + wtf("Job " + jobId + " didn't start: " + + " startUptime=" + startUptime + + " nowUptime=" + nowUptime + + " params=" + jobParametersToString(params)); + } } mStartedSyncs.delete(jobId); + mJobStartUptimes.delete(jobId); } Message m = Message.obtain(); m.what = SyncManager.SyncHandler.MESSAGE_STOP_SYNC; @@ -169,4 +186,9 @@ public class SyncJobService extends JobService { + SyncOperation.maybeCreateFromJobExtras(params.getExtras()); } } + + private void wtf(String message) { + mLogger.log(message); + Slog.wtf(TAG, message); + } } |