diff options
| -rw-r--r-- | core/java/android/util/LocalLog.java | 33 |
1 files changed, 27 insertions, 6 deletions
diff --git a/core/java/android/util/LocalLog.java b/core/java/android/util/LocalLog.java index 39f66a5f18fc..a405dab76656 100644 --- a/core/java/android/util/LocalLog.java +++ b/core/java/android/util/LocalLog.java @@ -30,20 +30,32 @@ public final class LocalLog { private LinkedList<String> mLog; private int mMaxLines; private long mNow; + private final boolean mKeepFirst; public LocalLog(int maxLines) { mLog = new LinkedList<String>(); mMaxLines = maxLines; + mKeepFirst = false; + } + + public LocalLog(int maxLines, boolean keepFirst) { + mLog = new LinkedList<String>(); + mMaxLines = maxLines; + mKeepFirst = keepFirst; } public synchronized void log(String msg) { + 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)); + logStraight(sb.toString() + " - " + msg); + } + + private synchronized void logStraight(String msg) { + if (mKeepFirst == false || mLog.size() < mMaxLines) mLog.add(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(); } } @@ -74,4 +86,13 @@ public final class LocalLog { public ReadOnlyLocalLog readOnlyLocalLog() { return new ReadOnlyLocalLog(this); } + + public synchronized void copyTo(LocalLog other, int lines) { + int end = mLog.size()-1; + int begin = end - lines; + if (begin < 0) begin = 0; + for (; begin < end; begin++) { + other.logStraight(mLog.get(begin)); + } + } } |