aboutsummaryrefslogtreecommitdiffstats
path: root/java/src/com/android/inputmethod/research/FixedLogBuffer.java
diff options
context:
space:
mode:
authorKurt Partridge <kep@google.com>2013-04-19 16:02:02 -0700
committerKurt Partridge <kep@google.com>2013-05-07 08:33:31 -0700
commit8064c669fe02cf90995dc82b1c67c8f434860dc5 (patch)
tree2debacc28c50bbfef273e2957b293f0b76ea1f80 /java/src/com/android/inputmethod/research/FixedLogBuffer.java
parent104bb70c65bb06702654f72cf2d12a2da547dc93 (diff)
downloadlatinime-8064c669fe02cf90995dc82b1c67c8f434860dc5.tar.gz
latinime-8064c669fe02cf90995dc82b1c67c8f434860dc5.tar.xz
latinime-8064c669fe02cf90995dc82b1c67c8f434860dc5.zip
Fix looping logic bugs.
shiftOut() is getting called once too often through these for loops. Change-Id: I9a68b49e6cc1469bcddd673ab1567e238cf192b8
Diffstat (limited to 'java/src/com/android/inputmethod/research/FixedLogBuffer.java')
-rw-r--r--java/src/com/android/inputmethod/research/FixedLogBuffer.java23
1 files changed, 11 insertions, 12 deletions
diff --git a/java/src/com/android/inputmethod/research/FixedLogBuffer.java b/java/src/com/android/inputmethod/research/FixedLogBuffer.java
index 4249af544..8b64de8ae 100644
--- a/java/src/com/android/inputmethod/research/FixedLogBuffer.java
+++ b/java/src/com/android/inputmethod/research/FixedLogBuffer.java
@@ -65,6 +65,7 @@ public class FixedLogBuffer extends LogBuffer {
final int numWordsIncoming = newLogUnit.getNumWords();
if (mNumActualWords >= mWordCapacity) {
// Give subclass a chance to handle the buffer full condition by shifting out logUnits.
+ // TODO: Tell onBufferFull() how much space it needs to make to avoid forced eviction.
onBufferFull();
// If still full, evict.
if (mNumActualWords >= mWordCapacity) {
@@ -119,21 +120,19 @@ public class FixedLogBuffer extends LogBuffer {
/**
* Remove LogUnits from the front of the LogBuffer until {@code numWords} have been removed.
*
- * If there are less than {@code numWords} word-containing {@link LogUnit}s, shifts out
- * all {@code LogUnit}s in the buffer.
+ * If there are less than {@code numWords} in the buffer, shifts out all {@code LogUnit}s.
*
- * @param numWords the minimum number of word-containing {@link LogUnit}s to shift out
- * @return the number of actual {@code LogUnit}s shifted out
+ * @param numWords the minimum number of words in {@link LogUnit}s to shift out
+ * @return the number of actual words LogUnit}s shifted out
*/
protected int shiftOutWords(final int numWords) {
- int numWordContainingLogUnitsShiftedOut = 0;
- for (LogUnit logUnit = shiftOut(); logUnit != null
- && numWordContainingLogUnitsShiftedOut < numWords; logUnit = shiftOut()) {
- if (logUnit.hasOneOrMoreWords()) {
- numWordContainingLogUnitsShiftedOut += logUnit.getNumWords();
- }
- }
- return numWordContainingLogUnitsShiftedOut;
+ int numWordsShiftedOut = 0;
+ do {
+ final LogUnit logUnit = shiftOut();
+ if (logUnit == null) break;
+ numWordsShiftedOut += logUnit.getNumWords();
+ } while (numWordsShiftedOut < numWords);
+ return numWordsShiftedOut;
}
public void shiftOutAll() {