Merge "Extend LocalLog to enable UTC timestamps"
This commit is contained in:
@@ -17,9 +17,11 @@
|
||||
package android.util;
|
||||
|
||||
import android.annotation.UnsupportedAppUsage;
|
||||
import android.os.SystemClock;
|
||||
|
||||
import java.io.FileDescriptor;
|
||||
import java.io.PrintWriter;
|
||||
import java.time.Instant;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.ArrayDeque;
|
||||
import java.util.Deque;
|
||||
@@ -33,10 +35,22 @@ public final class LocalLog {
|
||||
private final Deque<String> mLog;
|
||||
private final int mMaxLines;
|
||||
|
||||
/**
|
||||
* {@code true} to use log timestamps expressed in local date/time, {@code false} to use log
|
||||
* timestamped expressed with the elapsed realtime clock and UTC system clock. {@code false} is
|
||||
* useful when logging behavior that modifies device time zone or system clock.
|
||||
*/
|
||||
private final boolean mUseLocalTimestamps;
|
||||
|
||||
@UnsupportedAppUsage
|
||||
public LocalLog(int maxLines) {
|
||||
this(maxLines, true /* useLocalTimestamps */);
|
||||
}
|
||||
|
||||
public LocalLog(int maxLines, boolean useLocalTimestamps) {
|
||||
mMaxLines = Math.max(0, maxLines);
|
||||
mLog = new ArrayDeque<>(mMaxLines);
|
||||
mUseLocalTimestamps = useLocalTimestamps;
|
||||
}
|
||||
|
||||
@UnsupportedAppUsage
|
||||
@@ -44,7 +58,14 @@ public final class LocalLog {
|
||||
if (mMaxLines <= 0) {
|
||||
return;
|
||||
}
|
||||
append(String.format("%s - %s", LocalDateTime.now(), msg));
|
||||
final String logLine;
|
||||
if (mUseLocalTimestamps) {
|
||||
logLine = String.format("%s - %s", LocalDateTime.now(), msg);
|
||||
} else {
|
||||
logLine = String.format(
|
||||
"%s / %s - %s", SystemClock.elapsedRealtime(), Instant.now(), msg);
|
||||
}
|
||||
append(logLine);
|
||||
}
|
||||
|
||||
private synchronized void append(String logLine) {
|
||||
|
||||
@@ -29,14 +29,24 @@ import java.util.List;
|
||||
@LargeTest
|
||||
public class LocalLogTest extends TestCase {
|
||||
|
||||
public void testA() {
|
||||
public void testA_localTimestamps() {
|
||||
boolean localTimestamps = true;
|
||||
doTestA(localTimestamps);
|
||||
}
|
||||
|
||||
public void testA_nonLocalTimestamps() {
|
||||
boolean localTimestamps = false;
|
||||
doTestA(localTimestamps);
|
||||
}
|
||||
|
||||
private void doTestA(boolean localTimestamps) {
|
||||
String[] lines = {
|
||||
"foo",
|
||||
"bar",
|
||||
"baz"
|
||||
"foo",
|
||||
"bar",
|
||||
"baz"
|
||||
};
|
||||
String[] want = lines;
|
||||
testcase(new LocalLog(10), lines, want);
|
||||
testcase(new LocalLog(10, localTimestamps), lines, want);
|
||||
}
|
||||
|
||||
public void testB() {
|
||||
|
||||
@@ -66,7 +66,8 @@ public final class SimpleTimeDetectorStrategy implements TimeDetectorStrategy {
|
||||
private static final long SYSTEM_CLOCK_PARANOIA_THRESHOLD_MILLIS = 2 * 1000;
|
||||
|
||||
// A log for changes made to the system clock and why.
|
||||
@NonNull private final LocalLog mTimeChangesLog = new LocalLog(30);
|
||||
@NonNull
|
||||
private final LocalLog mTimeChangesLog = new LocalLog(30, false /* useLocalTimestamps */);
|
||||
|
||||
// @NonNull after initialize()
|
||||
private Callback mCallback;
|
||||
|
||||
@@ -172,7 +172,7 @@ public class TimeZoneDetectorStrategy {
|
||||
* (for use during debugging).
|
||||
*/
|
||||
@NonNull
|
||||
private final LocalLog mTimeZoneChangesLog = new LocalLog(30);
|
||||
private final LocalLog mTimeZoneChangesLog = new LocalLog(30, false /* useLocalTimestamps */);
|
||||
|
||||
/**
|
||||
* A mapping from phoneId to a linked list of phone time zone suggestions (the head being the
|
||||
|
||||
Reference in New Issue
Block a user