Loading java/src/com/android/inputmethod/latin/BinaryDictionary.java +3 −2 Original line number Diff line number Diff line Loading @@ -91,7 +91,8 @@ public final class BinaryDictionary extends Dictionary { JniUtils.loadNativeLibrary(); } private static native long openNative(String sourceDir, long dictOffset, long dictSize); private static native long openNative(String sourceDir, long dictOffset, long dictSize, boolean isUpdatable); private static native void closeNative(long dict); private static native int getProbabilityNative(long dict, int[] word); private static native boolean isValidBigramNative(long dict, int[] word1, int[] word2); Loading @@ -106,7 +107,7 @@ public final class BinaryDictionary extends Dictionary { // TODO: Move native dict into session private final void loadDictionary(final String path, final long startOffset, final long length) { mNativeDict = openNative(path, startOffset, length); mNativeDict = openNative(path, startOffset, length, false /* isUpdatable */); } @Override Loading native/jni/com_android_inputmethod_latin_BinaryDictionary.cpp +9 −5 Original line number Diff line number Diff line Loading @@ -40,7 +40,7 @@ class ProximityInfo; static void releaseDictBuf(const void *dictBuf, const size_t length, const int fd); static jlong latinime_BinaryDictionary_open(JNIEnv *env, jclass clazz, jstring sourceDir, jlong dictOffset, jlong dictSize) { jlong dictOffset, jlong dictSize, jboolean isUpdatable) { PROF_OPEN; PROF_START(66); const jsize sourceDirUtf8Length = env->GetStringUTFLength(sourceDir); Loading @@ -54,7 +54,9 @@ static jlong latinime_BinaryDictionary_open(JNIEnv *env, jclass clazz, jstring s int fd = 0; void *dictBuf = 0; int offset = 0; fd = open(sourceDirChars, O_RDONLY); const bool updatableMmap = (isUpdatable == JNI_TRUE); const int openMode = updatableMmap ? O_RDWR : O_RDONLY; fd = open(sourceDirChars, openMode); if (fd < 0) { AKLOGE("DICT: Can't open sourceDir. sourceDirChars=%s errno=%d", sourceDirChars, errno); return 0; Loading @@ -63,7 +65,8 @@ static jlong latinime_BinaryDictionary_open(JNIEnv *env, jclass clazz, jstring s offset = static_cast<int>(dictOffset) % pagesize; int adjDictOffset = static_cast<int>(dictOffset) - offset; int adjDictSize = static_cast<int>(dictSize) + offset; dictBuf = mmap(0, adjDictSize, PROT_READ, MAP_PRIVATE, fd, adjDictOffset); const int protMode = updatableMmap ? PROT_READ | PROT_WRITE : PROT_READ; dictBuf = mmap(0, adjDictSize, protMode, MAP_PRIVATE, fd, adjDictOffset); if (dictBuf == MAP_FAILED) { AKLOGE("DICT: Can't mmap dictionary. errno=%d", errno); return 0; Loading @@ -80,7 +83,8 @@ static jlong latinime_BinaryDictionary_open(JNIEnv *env, jclass clazz, jstring s AKLOGE("DICT: dictionary format is unknown, bad magic number"); releaseDictBuf(static_cast<const char *>(dictBuf) - offset, adjDictSize, fd); } else { dictionary = new Dictionary(dictBuf, static_cast<int>(dictSize), fd, offset); dictionary = new Dictionary( dictBuf, static_cast<int>(dictSize), fd, offset, updatableMmap); } PROF_END(66); PROF_CLOSE; Loading Loading @@ -245,7 +249,7 @@ static void releaseDictBuf(const void *dictBuf, const size_t length, const int f static const JNINativeMethod sMethods[] = { { const_cast<char *>("openNative"), const_cast<char *>("(Ljava/lang/String;JJ)J"), const_cast<char *>("(Ljava/lang/String;JJZ)J"), reinterpret_cast<void *>(latinime_BinaryDictionary_open) }, { Loading native/jni/src/suggest/core/dictionary/binary_dictionary_info.h +3 −2 Original line number Diff line number Diff line Loading @@ -30,9 +30,9 @@ class BinaryDictionaryHeader; class BinaryDictionaryInfo { public: BinaryDictionaryInfo(const uint8_t *const dictBuf, const int dictSize, const int mmapFd, const int dictBufOffset) const int dictBufOffset, const bool isUpdatable) : mDictBuf(dictBuf), mDictSize(dictSize), mMmapFd(mmapFd), mDictBufOffset(dictBufOffset), mDictBufOffset(dictBufOffset), mIsUpdatable(isUpdatable), mDictionaryFormat(BinaryDictionaryFormat::detectFormatVersion(mDictBuf, mDictSize)), mDictionaryHeader(this), mDictRoot(mDictBuf + mDictionaryHeader.getSize()) {} Loading Loading @@ -75,6 +75,7 @@ class BinaryDictionaryInfo { const int mDictSize; const int mMmapFd; const int mDictBufOffset; const bool mIsUpdatable; const BinaryDictionaryFormat::FORMAT_VERSION mDictionaryFormat; const BinaryDictionaryHeader mDictionaryHeader; const uint8_t *const mDictRoot; Loading native/jni/src/suggest/core/dictionary/dictionary.cpp +3 −3 Original line number Diff line number Diff line Loading @@ -32,9 +32,9 @@ namespace latinime { Dictionary::Dictionary(void *dict, int dictSize, int mmapFd, int dictBufOffset) : mBinaryDictionaryInfo( static_cast<const uint8_t *>(dict), dictSize, mmapFd, dictBufOffset), Dictionary::Dictionary(void *dict, int dictSize, int mmapFd, int dictBufOffset, bool isUpdatable) : mBinaryDictionaryInfo(static_cast<const uint8_t *>(dict), dictSize, mmapFd, dictBufOffset, isUpdatable), mBigramDictionary(new BigramDictionary(&mBinaryDictionaryInfo)), mGestureSuggest(new Suggest(GestureSuggestPolicyFactory::getGestureSuggestPolicy())), mTypingSuggest(new Suggest(TypingSuggestPolicyFactory::getTypingSuggestPolicy())) { Loading native/jni/src/suggest/core/dictionary/dictionary.h +1 −1 Original line number Diff line number Diff line Loading @@ -52,7 +52,7 @@ class Dictionary { static const int KIND_FLAG_POSSIBLY_OFFENSIVE = 0x80000000; static const int KIND_FLAG_EXACT_MATCH = 0x40000000; Dictionary(void *dict, int dictSize, int mmapFd, int dictBufOffset); Dictionary(void *dict, int dictSize, int mmapFd, int dictBufOffset, bool isUpdatable); int getSuggestions(ProximityInfo *proximityInfo, DicTraverseSession *traverseSession, int *xcoordinates, int *ycoordinates, int *times, int *pointerIds, int *inputCodePoints, Loading Loading
java/src/com/android/inputmethod/latin/BinaryDictionary.java +3 −2 Original line number Diff line number Diff line Loading @@ -91,7 +91,8 @@ public final class BinaryDictionary extends Dictionary { JniUtils.loadNativeLibrary(); } private static native long openNative(String sourceDir, long dictOffset, long dictSize); private static native long openNative(String sourceDir, long dictOffset, long dictSize, boolean isUpdatable); private static native void closeNative(long dict); private static native int getProbabilityNative(long dict, int[] word); private static native boolean isValidBigramNative(long dict, int[] word1, int[] word2); Loading @@ -106,7 +107,7 @@ public final class BinaryDictionary extends Dictionary { // TODO: Move native dict into session private final void loadDictionary(final String path, final long startOffset, final long length) { mNativeDict = openNative(path, startOffset, length); mNativeDict = openNative(path, startOffset, length, false /* isUpdatable */); } @Override Loading
native/jni/com_android_inputmethod_latin_BinaryDictionary.cpp +9 −5 Original line number Diff line number Diff line Loading @@ -40,7 +40,7 @@ class ProximityInfo; static void releaseDictBuf(const void *dictBuf, const size_t length, const int fd); static jlong latinime_BinaryDictionary_open(JNIEnv *env, jclass clazz, jstring sourceDir, jlong dictOffset, jlong dictSize) { jlong dictOffset, jlong dictSize, jboolean isUpdatable) { PROF_OPEN; PROF_START(66); const jsize sourceDirUtf8Length = env->GetStringUTFLength(sourceDir); Loading @@ -54,7 +54,9 @@ static jlong latinime_BinaryDictionary_open(JNIEnv *env, jclass clazz, jstring s int fd = 0; void *dictBuf = 0; int offset = 0; fd = open(sourceDirChars, O_RDONLY); const bool updatableMmap = (isUpdatable == JNI_TRUE); const int openMode = updatableMmap ? O_RDWR : O_RDONLY; fd = open(sourceDirChars, openMode); if (fd < 0) { AKLOGE("DICT: Can't open sourceDir. sourceDirChars=%s errno=%d", sourceDirChars, errno); return 0; Loading @@ -63,7 +65,8 @@ static jlong latinime_BinaryDictionary_open(JNIEnv *env, jclass clazz, jstring s offset = static_cast<int>(dictOffset) % pagesize; int adjDictOffset = static_cast<int>(dictOffset) - offset; int adjDictSize = static_cast<int>(dictSize) + offset; dictBuf = mmap(0, adjDictSize, PROT_READ, MAP_PRIVATE, fd, adjDictOffset); const int protMode = updatableMmap ? PROT_READ | PROT_WRITE : PROT_READ; dictBuf = mmap(0, adjDictSize, protMode, MAP_PRIVATE, fd, adjDictOffset); if (dictBuf == MAP_FAILED) { AKLOGE("DICT: Can't mmap dictionary. errno=%d", errno); return 0; Loading @@ -80,7 +83,8 @@ static jlong latinime_BinaryDictionary_open(JNIEnv *env, jclass clazz, jstring s AKLOGE("DICT: dictionary format is unknown, bad magic number"); releaseDictBuf(static_cast<const char *>(dictBuf) - offset, adjDictSize, fd); } else { dictionary = new Dictionary(dictBuf, static_cast<int>(dictSize), fd, offset); dictionary = new Dictionary( dictBuf, static_cast<int>(dictSize), fd, offset, updatableMmap); } PROF_END(66); PROF_CLOSE; Loading Loading @@ -245,7 +249,7 @@ static void releaseDictBuf(const void *dictBuf, const size_t length, const int f static const JNINativeMethod sMethods[] = { { const_cast<char *>("openNative"), const_cast<char *>("(Ljava/lang/String;JJ)J"), const_cast<char *>("(Ljava/lang/String;JJZ)J"), reinterpret_cast<void *>(latinime_BinaryDictionary_open) }, { Loading
native/jni/src/suggest/core/dictionary/binary_dictionary_info.h +3 −2 Original line number Diff line number Diff line Loading @@ -30,9 +30,9 @@ class BinaryDictionaryHeader; class BinaryDictionaryInfo { public: BinaryDictionaryInfo(const uint8_t *const dictBuf, const int dictSize, const int mmapFd, const int dictBufOffset) const int dictBufOffset, const bool isUpdatable) : mDictBuf(dictBuf), mDictSize(dictSize), mMmapFd(mmapFd), mDictBufOffset(dictBufOffset), mDictBufOffset(dictBufOffset), mIsUpdatable(isUpdatable), mDictionaryFormat(BinaryDictionaryFormat::detectFormatVersion(mDictBuf, mDictSize)), mDictionaryHeader(this), mDictRoot(mDictBuf + mDictionaryHeader.getSize()) {} Loading Loading @@ -75,6 +75,7 @@ class BinaryDictionaryInfo { const int mDictSize; const int mMmapFd; const int mDictBufOffset; const bool mIsUpdatable; const BinaryDictionaryFormat::FORMAT_VERSION mDictionaryFormat; const BinaryDictionaryHeader mDictionaryHeader; const uint8_t *const mDictRoot; Loading
native/jni/src/suggest/core/dictionary/dictionary.cpp +3 −3 Original line number Diff line number Diff line Loading @@ -32,9 +32,9 @@ namespace latinime { Dictionary::Dictionary(void *dict, int dictSize, int mmapFd, int dictBufOffset) : mBinaryDictionaryInfo( static_cast<const uint8_t *>(dict), dictSize, mmapFd, dictBufOffset), Dictionary::Dictionary(void *dict, int dictSize, int mmapFd, int dictBufOffset, bool isUpdatable) : mBinaryDictionaryInfo(static_cast<const uint8_t *>(dict), dictSize, mmapFd, dictBufOffset, isUpdatable), mBigramDictionary(new BigramDictionary(&mBinaryDictionaryInfo)), mGestureSuggest(new Suggest(GestureSuggestPolicyFactory::getGestureSuggestPolicy())), mTypingSuggest(new Suggest(TypingSuggestPolicyFactory::getTypingSuggestPolicy())) { Loading
native/jni/src/suggest/core/dictionary/dictionary.h +1 −1 Original line number Diff line number Diff line Loading @@ -52,7 +52,7 @@ class Dictionary { static const int KIND_FLAG_POSSIBLY_OFFENSIVE = 0x80000000; static const int KIND_FLAG_EXACT_MATCH = 0x40000000; Dictionary(void *dict, int dictSize, int mmapFd, int dictBufOffset); Dictionary(void *dict, int dictSize, int mmapFd, int dictBufOffset, bool isUpdatable); int getSuggestions(ProximityInfo *proximityInfo, DicTraverseSession *traverseSession, int *xcoordinates, int *ycoordinates, int *times, int *pointerIds, int *inputCodePoints, Loading