diff options
Diffstat (limited to 'core/java/android/util/LocalLog.java')
| -rw-r--r-- | core/java/android/util/LocalLog.java | 44 |
1 files changed, 26 insertions, 18 deletions
diff --git a/core/java/android/util/LocalLog.java b/core/java/android/util/LocalLog.java index 39f66a5f18fc..665c583a56ab 100644 --- a/core/java/android/util/LocalLog.java +++ b/core/java/android/util/LocalLog.java @@ -20,44 +20,49 @@ import java.io.FileDescriptor; import java.io.PrintWriter; import java.util.Calendar; import java.util.Iterator; -import java.util.LinkedList; +import java.util.Deque; +import java.util.ArrayDeque; /** * @hide */ public final class LocalLog { - private LinkedList<String> mLog; - private int mMaxLines; - private long mNow; + private final Deque<String> mLog; + private final int mMaxLines; public LocalLog(int maxLines) { - mLog = new LinkedList<String>(); - mMaxLines = maxLines; + mMaxLines = Math.max(0, maxLines); + mLog = new ArrayDeque<>(mMaxLines); } - public synchronized void log(String msg) { - if (mMaxLines > 0) { - mNow = System.currentTimeMillis(); - StringBuilder sb = new StringBuilder(); - Calendar c = Calendar.getInstance(); - c.setTimeInMillis(mNow); - sb.append(String.format("%tm-%td %tH:%tM:%tS.%tL", c, c, c, c, c, c)); - mLog.add(sb.toString() + " - " + msg); - while (mLog.size() > mMaxLines) mLog.remove(); + public void log(String msg) { + if (mMaxLines <= 0) { + return; } + Calendar c = Calendar.getInstance(); + c.setTimeInMillis(System.currentTimeMillis()); + append(String.format("%tm-%td %tH:%tM:%tS.%tL - %s", c, c, c, c, c, c, msg)); + } + + private synchronized void append(String logLine) { + while (mLog.size() >= mMaxLines) { + mLog.remove(); + } + mLog.add(logLine); } public synchronized void dump(FileDescriptor fd, PrintWriter pw, String[] args) { - Iterator<String> itr = mLog.listIterator(0); + Iterator<String> itr = mLog.iterator(); while (itr.hasNext()) { pw.println(itr.next()); } } public synchronized void reverseDump(FileDescriptor fd, PrintWriter pw, String[] args) { - for (int i = mLog.size() - 1; i >= 0; i--) { - pw.println(mLog.get(i)); + Iterator<String> itr = mLog.descendingIterator(); + while (itr.hasNext()) { + pw.println(itr.next()); } } @@ -69,6 +74,9 @@ public final class LocalLog { public void dump(FileDescriptor fd, PrintWriter pw, String[] args) { mLog.dump(fd, pw, args); } + public void reverseDump(FileDescriptor fd, PrintWriter pw, String[] args) { + mLog.reverseDump(fd, pw, args); + } } public ReadOnlyLocalLog readOnlyLocalLog() { |
