]> gitweb.fperrin.net Git - Dictionary.git/commitdiff
Make thread priority setting actually work.
authorReimar Döffinger <Reimar.Doeffinger@gmx.de>
Sun, 19 Mar 2017 20:39:25 +0000 (21:39 +0100)
committerReimar Döffinger <Reimar.Doeffinger@gmx.de>
Sun, 19 Mar 2017 20:41:46 +0000 (21:41 +0100)
Also tune the priority value for better results.

src/com/hughes/android/dictionary/DictionaryActivity.java
src/com/hughes/android/dictionary/DictionaryApplication.java
src/com/hughes/android/dictionary/engine/Index.java
src/com/hughes/android/dictionary/engine/TransliteratorManager.java

index 084122b64aa3ffb00956722d20daa24264008729..9523215e9bd72e5cab208d4205e946c18daeec7d 100644 (file)
@@ -432,24 +432,25 @@ public class DictionaryActivity extends ActionBarActivity {
 
         setListAdapter(new IndexAdapter(index));
 
+        // Pre-load the Transliterator (will spawn its own thread)
+        TransliteratorManager.init(new TransliteratorManager.Callback() {
+            @Override
+            public void onTransliteratorReady() {
+                uiHandler.post(new Runnable() {
+                    @Override
+                    public void run() {
+                        onSearchTextChange(searchView.getQuery().toString());
+                    }
+                });
+            }
+        }, DictionaryApplication.threadBackground);
+
         // Pre-load the collators.
         new Thread(new Runnable() {
             public void run() {
-                android.os.Process.setThreadPriority(android.os.Process.THREAD_PRIORITY_BACKGROUND);
+                android.os.Process.setThreadPriority(android.os.Process.THREAD_PRIORITY_LESS_FAVORABLE);
                 final long startMillis = System.currentTimeMillis();
                 try {
-                    TransliteratorManager.init(new TransliteratorManager.Callback() {
-                        @Override
-                        public void onTransliteratorReady() {
-                            uiHandler.post(new Runnable() {
-                                @Override
-                                public void run() {
-                                    onSearchTextChange(searchView.getQuery().toString());
-                                }
-                            });
-                        }
-                    });
-
                     for (final Index index : dictionary.indices) {
                         final String searchToken = index.sortedIndexEntries.get(0).token;
                         final IndexEntry entry = index.findExact(searchToken);
index 53e4175d595b14a819666479ff7d2f00081ac217..ea0d0b11df619cfe8d597c30c8ea6a5a1229aa4b 100644 (file)
@@ -72,6 +72,15 @@ public class DictionaryApplication extends Application {
     //static public final boolean USE_COLLATOR = !android.os.Build.FINGERPRINT.equals("Samsung/cm_tassve/tassve:4.4.4/KTU84Q/20150211:userdebug/release-keys");
     static public final boolean USE_COLLATOR = true;
 
+    static public final TransliteratorManager.ThreadSetup threadBackground = new TransliteratorManager.ThreadSetup() {
+        @Override
+        public void onThreadStart() {
+            // THREAD_PRIORITY_BACKGROUND seemed like a good idea, but it
+            // can make Transliterator go from 20 seconds to 3 minutes (!)
+            android.os.Process.setThreadPriority(android.os.Process.THREAD_PRIORITY_LESS_FAVORABLE);
+        }
+    };
+
     // Static, determined by resources (and locale).
     // Unordered.
     static Map<String, DictionaryInfo> DOWNLOADABLE_UNCOMPRESSED_FILENAME_NAME_TO_DICTIONARY_INFO = null;
@@ -328,7 +337,7 @@ public class DictionaryApplication extends Application {
     public void onCreate() {
         super.onCreate();
         Log.d("QuickDic", "Application: onCreate");
-        TransliteratorManager.init(null);
+        TransliteratorManager.init(null, threadBackground);
         staticInit(getApplicationContext());
 
         languageButtonPixels = (int) TypedValue.applyDimension(
index e289f4942909b1433c36591dcc566a60589e7256..9ac805a3872c96ca66187062c356817e281a2270 100644 (file)
@@ -517,7 +517,7 @@ public final class Index implements RAFSerializable<Index> {
     }
 
     private String normalizeToken(final String searchToken) {
-        if (TransliteratorManager.init(null)) {
+        if (TransliteratorManager.init(null, null)) {
             final Transliterator normalizer = normalizer();
             return normalizer.transliterate(searchToken);
         } else {
index eacab80daac3bd9a5189bbb6433b6dd7c2f99923..9613d9fccc8ba7a84328f11abfabb681fd48a200 100644 (file)
@@ -25,6 +25,7 @@ public class TransliteratorManager {
 
     private static boolean starting = false;
     private static boolean ready = false;
+    private static ThreadSetup threadSetup = null;
     private static LRUCacheMap<String, Transliterator> cache = new LRUCacheMap<String, Transliterator>(4);
 
     // Whom to notify when we're all set up and ready to go.
@@ -46,7 +47,7 @@ public class TransliteratorManager {
         return result;
     }
 
-    public static synchronized boolean init(final Callback callback) {
+    public static synchronized boolean init(final Callback callback, final ThreadSetup setupCallback) {
         if (ready) {
             return true;
         }
@@ -55,6 +56,7 @@ public class TransliteratorManager {
         }
         if (!starting) {
             starting = true;
+            threadSetup = setupCallback;
             new Thread(init).start();
         }
         return false;
@@ -63,6 +65,9 @@ public class TransliteratorManager {
     private static final Runnable init = new Runnable() {
         @Override
         public void run() {
+            synchronized (TransliteratorManager.class) {
+                if (threadSetup != null) threadSetup.onThreadStart();
+            }
             System.out.println("Starting Transliterator load.");
             final String transliterated = get(Language.en.getDefaultNormalizerRules()).transliterate("Îñţérñåţîöñåļîžåţîờñ");
             if (!"internationalization".equals(transliterated)) {
@@ -80,6 +85,10 @@ public class TransliteratorManager {
         }
     };
 
+    public interface ThreadSetup {
+        void onThreadStart();
+    }
+
     public interface Callback {
         void onTransliteratorReady();
     }