diff options
author | Keiji Ariyama <keiji_ariyama@c-lis.co.jp> | 2012-04-04 10:34:22 +0900 |
---|---|---|
committer | Keiji Ariyama <keiji_ariyama@c-lis.co.jp> | 2012-04-04 11:03:06 +0900 |
commit | 047400e2c752b070ca008d1b09db4e8778f8aaff (patch) | |
tree | e0b8da145b2719aa914ef41d5aead4a15dc9d53a /ddms/libs | |
parent | dfe7233d24be55c64cf5f0344f3f97d6aba48bbd (diff) | |
download | sdk-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/libs')
-rw-r--r-- | ddms/libs/ddmuilib/src/com/android/ddmuilib/logcat/LogCatMessageList.java | 10 | ||||
-rw-r--r-- | ddms/libs/ddmuilib/src/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<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. */ |