summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/java/android/util/LocalLog.java33
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));
+ }
+ }
}