aboutsummaryrefslogtreecommitdiffstats
path: root/ddms
diff options
context:
space:
mode:
authorKeiji Ariyama <keiji_ariyama@c-lis.co.jp>2012-04-04 10:34:22 +0900
committerKeiji Ariyama <keiji_ariyama@c-lis.co.jp>2012-04-04 11:03:06 +0900
commit047400e2c752b070ca008d1b09db4e8778f8aaff (patch)
treee0b8da145b2719aa914ef41d5aead4a15dc9d53a /ddms
parentdfe7233d24be55c64cf5f0344f3f97d6aba48bbd (diff)
downloadsdk-047400e2c752b070ca008d1b09db4e8778f8aaff.zip
sdk-047400e2c752b070ca008d1b09db4e8778f8aaff.tar.gz
sdk-047400e2c752b070ca008d1b09db4e8778f8aaff.tar.bz2
Fixes unexpected rows are copied when LogCat paused.
Issue: http://code.google.com/p/android/issues/detail?id=28253 Change-Id: If7b3c2a898b30834a8e76c5aad615a41ba5ecc04
Diffstat (limited to 'ddms')
-rw-r--r--ddms/libs/ddmuilib/src/com/android/ddmuilib/logcat/LogCatMessageList.java10
-rw-r--r--ddms/libs/ddmuilib/src/com/android/ddmuilib/logcat/LogCatPanel.java34
2 files changed, 37 insertions, 7 deletions
diff --git a/ddms/libs/ddmuilib/src/com/android/ddmuilib/logcat/LogCatMessageList.java b/ddms/libs/ddmuilib/src/com/android/ddmuilib/logcat/LogCatMessageList.java
index 7651250..0d0e3c2 100644
--- a/ddms/libs/ddmuilib/src/com/android/ddmuilib/logcat/LogCatMessageList.java
+++ b/ddms/libs/ddmuilib/src/com/android/ddmuilib/logcat/LogCatMessageList.java
@@ -82,6 +82,16 @@ public final class LogCatMessageList {
}
/**
+ * Returns the number of additional elements that this queue can
+ * ideally (in the absence of memory or resource constraints)
+ * accept without blocking.
+ * @return the remaining capacity
+ */
+ public synchronized int remainingCapacity() {
+ return mQ.remainingCapacity();
+ }
+
+ /**
* Clear all messages in the list.
*/
public synchronized void clear() {
diff --git a/ddms/libs/ddmuilib/src/com/android/ddmuilib/logcat/LogCatPanel.java b/ddms/libs/ddmuilib/src/com/android/ddmuilib/logcat/LogCatPanel.java
index 43dddf1..7aa0328 100644
--- a/ddms/libs/ddmuilib/src/com/android/ddmuilib/logcat/LogCatPanel.java
+++ b/ddms/libs/ddmuilib/src/com/android/ddmuilib/logcat/LogCatPanel.java
@@ -132,6 +132,9 @@ public final class LogCatPanel extends SelectionDependentPanel
private List<LogCatFilter> mLogCatFilters;
private int mCurrentSelectedFilterIndex;
+ private int mRemovedEntriesCount = 0;
+ private int mPreviousRemainingCapacity = 0;
+
private ToolItem mNewFilterToolItem;
private ToolItem mDeleteFilterToolItem;
private ToolItem mEditFilterToolItem;
@@ -554,6 +557,8 @@ public final class LogCatPanel extends SelectionDependentPanel
mReceiver.clearMessages();
refreshLogCatTable();
+ mRemovedEntriesCount = 0;
+
// the filters view is not cleared unless the filters are re-applied.
updateAppliedFilters();
}
@@ -685,7 +690,9 @@ public final class LogCatPanel extends SelectionDependentPanel
List<LogCatMessage> filteredItems = applyCurrentFilters((LogCatMessageList) input);
List<LogCatMessage> selectedMessages = new ArrayList<LogCatMessage>(indices.length);
for (int i : indices) {
- if (i < filteredItems.size()) {
+ // consider removed logcat message entries
+ i -= mRemovedEntriesCount;
+ if (i >= 0 && i < filteredItems.size()) {
LogCatMessage m = filteredItems.get(i);
selectedMessages.add(m);
}
@@ -1030,8 +1037,18 @@ public final class LogCatPanel extends SelectionDependentPanel
public void messageReceived(List<LogCatMessage> receivedMessages) {
refreshLogCatTable();
- updateUnreadCount(receivedMessages);
- refreshFiltersTable();
+ if (mShouldScrollToLatestLog) {
+ updateUnreadCount(receivedMessages);
+ refreshFiltersTable();
+ } else {
+ LogCatMessageList messageList = mReceiver.getMessages();
+ int remainingCapacity = messageList.remainingCapacity();
+ if (remainingCapacity == 0) {
+ mRemovedEntriesCount +=
+ receivedMessages.size() - mPreviousRemainingCapacity;
+ }
+ mPreviousRemainingCapacity = remainingCapacity;
+ }
}
/**
@@ -1098,6 +1115,7 @@ public final class LogCatPanel extends SelectionDependentPanel
/** Scroll to the last line. */
private void scrollToLatestLog() {
+ mRemovedEntriesCount = 0;
mViewer.getTable().setTopIndex(mViewer.getTable().getItemCount() - 1);
}
@@ -1170,10 +1188,12 @@ public final class LogCatPanel extends SelectionDependentPanel
sb.append('\n');
}
- clipboard.setContents(
- new Object[] {sb.toString()},
- new Transfer[] {TextTransfer.getInstance()}
- );
+ if (sb.length() > 0) {
+ clipboard.setContents(
+ new Object[] {sb.toString()},
+ new Transfer[] {TextTransfer.getInstance()}
+ );
+ }
}
/** Select all items in the logcat table. */