From: Hall Liu Date: Tue, 6 Mar 2018 22:20:37 +0000 (-0800) Subject: Fix Telecom dumpsys timestamps X-Git-Tag: android-x86-9.0-r1~186^2~2^2 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=074d2338fa21285f20b43275ac23d2f45331868c;p=android-x86%2Fframeworks-base.git Fix Telecom dumpsys timestamps Change the dumpsys timestamps to use java.time for processing and always log events with local timezone that was in effect at the time the event happened. Bug: 74250969 Test: manual, run dumpsys Change-Id: Ie53cff4400be1528b3224bd556536a689ef22c8c --- diff --git a/telecomm/java/android/telecom/Logging/EventManager.java b/telecomm/java/android/telecom/Logging/EventManager.java index 4fc338539f42..2bda6480b99e 100644 --- a/telecomm/java/android/telecom/Logging/EventManager.java +++ b/telecomm/java/android/telecom/Logging/EventManager.java @@ -24,21 +24,20 @@ import android.util.Pair; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.util.IndentingPrintWriter; -import java.text.DateFormat; -import java.text.SimpleDateFormat; +import java.time.Instant; +import java.time.ZoneId; +import java.time.ZonedDateTime; +import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; -import java.util.Date; import java.util.HashMap; import java.util.IllegalFormatException; import java.util.LinkedList; import java.util.List; import java.util.Locale; import java.util.Map; -import java.util.TimeZone; import java.util.concurrent.LinkedBlockingQueue; -import java.util.stream.Collectors; /** * A utility class that provides the ability to define Events that a subsystem deems important, and @@ -53,7 +52,8 @@ public class EventManager { public static final String TAG = "Logging.Events"; @VisibleForTesting public static final int DEFAULT_EVENTS_TO_CACHE = 10; // Arbitrarily chosen. - private final DateFormat sDateFormat = new SimpleDateFormat("HH:mm:ss.SSS"); + public static final DateTimeFormatter DATE_TIME_FORMATTER = + DateTimeFormatter.ofPattern("HH:mm:ss.SSS"); public interface Loggable { /** @@ -131,11 +131,17 @@ public class EventManager { public String sessionId; public long time; public Object data; + // String storing the date for display. This will be computed at the time/timezone when + // the event is recorded. + public final String timestampString; public Event(String eventId, String sessionId, long time, Object data) { this.eventId = eventId; this.sessionId = sessionId; this.time = time; + timestampString = + ZonedDateTime.ofInstant(Instant.ofEpochMilli(time), ZoneId.systemDefault()) + .format(DATE_TIME_FORMATTER); this.data = data; } } @@ -228,7 +234,7 @@ public class EventManager { pw.increaseIndent(); for (Event event : mEvents) { - pw.print(sDateFormat.format(new Date(event.time))); + pw.print(event.timestampString); pw.print(" - "); pw.print(event.eventId); if (event.data != null) { @@ -269,7 +275,6 @@ public class EventManager { public EventManager(@NonNull SessionManager.ISessionIdQueryHandler l) { mSessionIdHandler = l; - sDateFormat.setTimeZone(TimeZone.getDefault()); } public void event(Loggable recordEntry, String event, Object data) { @@ -329,15 +334,15 @@ public class EventManager { } } - // Sort by event time. - Comparator> byEventTime = (e1, e2) -> { - return Long.compare(e1.second.time, e2.second.time); - }; + // Sort by event time. This might result in out-of-order seeming events if the timezone + // changes somewhere in the middle. + Comparator> byEventTime = + Comparator.comparingLong(e -> e.second.time); events.sort(byEventTime); pw.increaseIndent(); for (Pair event : events) { - pw.print(sDateFormat.format(new Date(event.second.time))); + pw.print(event.second.timestampString); pw.print(","); pw.print(event.first.getId()); pw.print(",");