OSDN Git Service

[Haleakala] Change JPEG compression thread priority to BACKGROUND - 1.
authorSascha Haeberling <haeberling@google.com>
Wed, 22 Jul 2015 23:52:31 +0000 (16:52 -0700)
committerSascha Haeberling <haeberling@google.com>
Thu, 23 Jul 2015 00:04:53 +0000 (17:04 -0700)
  Bug: 22670310

Change-Id: Ic2ee7e2de141d7df2a316733b465daa354b2d517

src/com/android/camera/async/AndroidPriorityThread.java [new file with mode: 0644]
src/com/android/camera/processing/imagebackend/ImageBackend.java

diff --git a/src/com/android/camera/async/AndroidPriorityThread.java b/src/com/android/camera/async/AndroidPriorityThread.java
new file mode 100644 (file)
index 0000000..f12bcb2
--- /dev/null
@@ -0,0 +1,28 @@
+
+package com.android.camera.async;
+
+/**
+ * A thread that runs at the given Android thread priority.
+ */
+public class AndroidPriorityThread extends Thread {
+    private final int mAndroidThreadPriority;
+
+    /**
+     * Constructs the new thread.
+     *
+     * @param androidThreadPriority the android priority the thread should run
+     *            at. This has to be one of the
+     *            android.os.Process.THREAD_PRIORITY_* values.
+     * @param runnable the runnable to run at this thread priority.
+     */
+    public AndroidPriorityThread(int androidThreadPriority, Runnable runnable) {
+        super(runnable);
+        mAndroidThreadPriority = androidThreadPriority;
+    }
+
+    @Override
+    public void run() {
+        android.os.Process.setThreadPriority(mAndroidThreadPriority);
+        super.run();
+    }
+}
index 3297ff5..fdfeea5 100644 (file)
@@ -16,6 +16,9 @@
 
 package com.android.camera.processing.imagebackend;
 
+import android.os.Process;
+
+import com.android.camera.async.AndroidPriorityThread;
 import com.android.camera.debug.Log;
 import com.android.camera.processing.ProcessingTaskConsumer;
 import com.android.camera.processing.memory.ByteBufferDirectPool;
@@ -84,16 +87,18 @@ import java.util.concurrent.locks.ReentrantLock;
  * already been completed should return immediately on its process call.
  */
 public class ImageBackend implements ImageConsumer, ImageTaskManager {
-    private final static Log.Tag TAG = new Log.Tag("ImageBackend");
-
-    protected static final int FAST_THREAD_PRIORITY = Thread.MAX_PRIORITY;
-    protected static final int AVERAGE_THREAD_PRIORITY = Thread.NORM_PRIORITY - 1;
-    protected static final int SLOW_THREAD_PRIORITY = Thread.MIN_PRIORITY;
+    private static final Log.Tag TAG = new Log.Tag("ImageBackend");
 
     protected static final int NUM_THREADS_FAST = 2;
     protected static final int NUM_THREADS_AVERAGE = 2;
     protected static final int NUM_THREADS_SLOW = 2;
 
+    private static final int FAST_THREAD_PRIORITY = Process.THREAD_PRIORITY_DISPLAY;
+    private static final int AVERAGE_THREAD_PRIORITY = Process.THREAD_PRIORITY_DEFAULT
+            + Process.THREAD_PRIORITY_LESS_FAVORABLE;
+    private static final int SLOW_THREAD_PRIORITY = Process.THREAD_PRIORITY_BACKGROUND
+            + Process.THREAD_PRIORITY_MORE_FAVORABLE;
+
     private static final int IMAGE_BACKEND_HARD_REF_POOL_SIZE = 2;
 
     protected final ProcessingTaskConsumer mProcessingTaskConsumer;
@@ -920,28 +925,25 @@ public class ImageBackend implements ImageConsumer, ImageTaskManager {
 
     // Thread factories for a default constructor
     private class FastThreadFactory implements ThreadFactory {
-
+        @Override
         public Thread newThread(Runnable r) {
-            Thread t = new Thread(r);
-            t.setPriority(FAST_THREAD_PRIORITY);
+            Thread t = new AndroidPriorityThread(FAST_THREAD_PRIORITY, r);
             return t;
         }
     }
 
     private class AverageThreadFactory implements ThreadFactory {
-
+        @Override
         public Thread newThread(Runnable r) {
-            Thread t = new Thread(r);
-            t.setPriority(AVERAGE_THREAD_PRIORITY);
+            Thread t = new AndroidPriorityThread(AVERAGE_THREAD_PRIORITY, r);
             return t;
         }
     }
 
     private class SlowThreadFactory implements ThreadFactory {
-
+        @Override
         public Thread newThread(Runnable r) {
-            Thread t = new Thread(r);
-            t.setPriority(SLOW_THREAD_PRIORITY);
+            Thread t = new AndroidPriorityThread(SLOW_THREAD_PRIORITY, r);
             return t;
         }
     }