From 047400e2c752b070ca008d1b09db4e8778f8aaff Mon Sep 17 00:00:00 2001 From: Keiji Ariyama Date: Wed, 4 Apr 2012 10:34:22 +0900 Subject: Fixes unexpected rows are copied when LogCat paused. Issue: http://code.google.com/p/android/issues/detail?id=28253 Change-Id: If7b3c2a898b30834a8e76c5aad615a41ba5ecc04 --- .../android/ddmuilib/logcat/LogCatMessageList.java | 10 +++++++ .../com/android/ddmuilib/logcat/LogCatPanel.java | 34 +++++++++++++++++----- 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 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 filteredItems = applyCurrentFilters((LogCatMessageList) input); List selectedMessages = new ArrayList(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 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. */ -- cgit v1.1