Quit blocking getSuggestion during GC.
Bug: 10831272
Change-Id: I995c619dc18a9120a47f547d31045cb73a9353ec
diff --git a/java/src/com/android/inputmethod/latin/BinaryDictionary.java b/java/src/com/android/inputmethod/latin/BinaryDictionary.java
index 29c6c04..eedb906 100644
--- a/java/src/com/android/inputmethod/latin/BinaryDictionary.java
+++ b/java/src/com/android/inputmethod/latin/BinaryDictionary.java
@@ -269,18 +269,11 @@
return getBigramProbabilityNative(mNativeDict, codePoints0, codePoints1);
}
- private void runGCIfRequired() {
- if (needsToRunGC(true /* mindsBlockByGC */)) {
- flushWithGC();
- }
- }
-
// Add a unigram entry to binary dictionary in native code.
public void addUnigramWord(final String word, final int probability) {
if (TextUtils.isEmpty(word)) {
return;
}
- runGCIfRequired();
final int[] codePoints = StringUtils.toCodePointArray(word);
addUnigramWordNative(mNativeDict, codePoints, probability);
}
@@ -290,7 +283,6 @@
if (TextUtils.isEmpty(word0) || TextUtils.isEmpty(word1)) {
return;
}
- runGCIfRequired();
final int[] codePoints0 = StringUtils.toCodePointArray(word0);
final int[] codePoints1 = StringUtils.toCodePointArray(word1);
addBigramWordsNative(mNativeDict, codePoints0, codePoints1, probability);
@@ -301,7 +293,6 @@
if (TextUtils.isEmpty(word0) || TextUtils.isEmpty(word1)) {
return;
}
- runGCIfRequired();
final int[] codePoints0 = StringUtils.toCodePointArray(word0);
final int[] codePoints1 = StringUtils.toCodePointArray(word1);
removeBigramWordsNative(mNativeDict, codePoints0, codePoints1);
diff --git a/java/src/com/android/inputmethod/latin/ExpandableBinaryDictionary.java b/java/src/com/android/inputmethod/latin/ExpandableBinaryDictionary.java
index 2d1ca51..306c1a2 100644
--- a/java/src/com/android/inputmethod/latin/ExpandableBinaryDictionary.java
+++ b/java/src/com/android/inputmethod/latin/ExpandableBinaryDictionary.java
@@ -273,6 +273,24 @@
lastModifiedTime);
}
+ private void runGCIfRequired() {
+ if (!ENABLE_BINARY_DICTIONARY_DYNAMIC_UPDATE) return;
+ if (mBinaryDictionary.needsToRunGC(true /* mindsBlockByGC */)) {
+ if (setIsRegeneratingIfNotRegenerating()) {
+ getExecutor(mFilename).execute(new Runnable() {
+ @Override
+ public void run() {
+ try {
+ mBinaryDictionary.flushWithGC();
+ } finally {
+ mFilenameDictionaryUpdateController.mIsRegenerating.set(false);
+ }
+ }
+ });
+ }
+ }
+ }
+
/**
* Dynamically adds a word unigram to the dictionary. May overwrite an existing entry.
*/
@@ -282,7 +300,7 @@
Log.w(TAG, "addWordDynamically is called for non-updatable dictionary: " + mFilename);
return;
}
-
+ runGCIfRequired();
getExecutor(mFilename).execute(new Runnable() {
@Override
public void run() {
@@ -306,7 +324,7 @@
+ mFilename);
return;
}
-
+ runGCIfRequired();
getExecutor(mFilename).execute(new Runnable() {
@Override
public void run() {
@@ -330,7 +348,7 @@
+ mFilename);
return;
}
-
+ runGCIfRequired();
getExecutor(mFilename).execute(new Runnable() {
@Override
public void run() {