Enhance recent sync log in dumpsys content
- Add "Per Adapter History" section that has recent activities per adapter. Example:
mxxxx@gmail.com/com.google u0 [com.android.calendar]
2017-06-19 14:19:07 success Source=LOCAL Elapsed=0s Reason=10014 Extras=[upload=true ]
2017-06-19 14:19:06 success Source=SERVER Elapsed=16s Reason=10014 Extras=[feed=#contacts@group.v.calendar.google.com ]
mxxxx@gmail.com/com.google u0 [com.android.chrome]
2017-06-19 13:26:25 canceled Source=POLL Elapsed=0s Reason=AccountsUpdated Extras=[initialize=true ]
mxxxx@gmail.com/com.google u0 [com.android.contacts]
- Improve pending/periodic syncs with better formatting, and sort them in a sane order.
Bug: 38498544
Bug: 62391411
Test: manual test with "dumpsys content"
Change-Id: I947a9255230f27a7f438d648da324787fdf16f55
diff --git a/core/java/android/content/SyncStatusInfo.java b/core/java/android/content/SyncStatusInfo.java
index bb24ccd..663e6e4 100644
--- a/core/java/android/content/SyncStatusInfo.java
+++ b/core/java/android/content/SyncStatusInfo.java
@@ -24,7 +24,11 @@
/** @hide */
public class SyncStatusInfo implements Parcelable {
- static final int VERSION = 2;
+ private static final String TAG = "Sync";
+
+ static final int VERSION = 3;
+
+ private static final int MAX_EVENT_COUNT = 10;
public final int authorityId;
public long totalElapsedTime;
@@ -47,7 +51,8 @@
// no race conditions when accessing this list
private ArrayList<Long> periodicSyncTimes;
- private static final String TAG = "Sync";
+ private final ArrayList<Long> mLastEventTimes = new ArrayList<>();
+ private final ArrayList<String> mLastEvents = new ArrayList<>();
public SyncStatusInfo(int authorityId) {
this.authorityId = authorityId;
@@ -92,6 +97,11 @@
} else {
parcel.writeInt(-1);
}
+ parcel.writeInt(mLastEventTimes.size());
+ for (int i = 0; i < mLastEventTimes.size(); i++) {
+ parcel.writeLong(mLastEventTimes.get(i));
+ parcel.writeString(mLastEvents.get(i));
+ }
}
public SyncStatusInfo(Parcel parcel) {
@@ -117,15 +127,24 @@
if (version == 1) {
periodicSyncTimes = null;
} else {
- int N = parcel.readInt();
- if (N < 0) {
+ final int count = parcel.readInt();
+ if (count < 0) {
periodicSyncTimes = null;
} else {
periodicSyncTimes = new ArrayList<Long>();
- for (int i=0; i<N; i++) {
+ for (int i = 0; i < count; i++) {
periodicSyncTimes.add(parcel.readLong());
}
}
+ if (version >= 3) {
+ mLastEventTimes.clear();
+ mLastEvents.clear();
+ final int nEvents = parcel.readInt();
+ for (int i = 0; i < nEvents; i++) {
+ mLastEventTimes.add(parcel.readLong());
+ mLastEvents.add(parcel.readString());
+ }
+ }
}
}
@@ -149,6 +168,8 @@
if (other.periodicSyncTimes != null) {
periodicSyncTimes = new ArrayList<Long>(other.periodicSyncTimes);
}
+ mLastEventTimes.addAll(other.mLastEventTimes);
+ mLastEvents.addAll(other.mLastEvents);
}
public void setPeriodicSyncTime(int index, long when) {
@@ -172,6 +193,31 @@
}
}
+ /** */
+ public void addEvent(String message) {
+ if (mLastEventTimes.size() >= MAX_EVENT_COUNT) {
+ mLastEventTimes.remove(MAX_EVENT_COUNT - 1);
+ mLastEvents.remove(MAX_EVENT_COUNT - 1);
+ }
+ mLastEventTimes.add(0, System.currentTimeMillis());
+ mLastEvents.add(0, message);
+ }
+
+ /** */
+ public int getEventCount() {
+ return mLastEventTimes.size();
+ }
+
+ /** */
+ public long getEventTime(int i) {
+ return mLastEventTimes.get(i);
+ }
+
+ /** */
+ public String getEvent(int i) {
+ return mLastEvents.get(i);
+ }
+
public static final Creator<SyncStatusInfo> CREATOR = new Creator<SyncStatusInfo>() {
public SyncStatusInfo createFromParcel(Parcel in) {
return new SyncStatusInfo(in);