From ae474d0b2967b3995a4e1e334d6689b0cd9a38c9 Mon Sep 17 00:00:00 2001 From: Sascha Haeberling Date: Wed, 22 Jul 2015 16:52:31 -0700 Subject: [Haleakala] Change JPEG compression thread priority to BACKGROUND - 1. Bug: 22670310 Change-Id: Ic2ee7e2de141d7df2a316733b465daa354b2d517 --- .../camera/async/AndroidPriorityThread.java | 28 ++++++++++++++++++++ .../processing/imagebackend/ImageBackend.java | 30 ++++++++++++---------- 2 files changed, 44 insertions(+), 14 deletions(-) create mode 100644 src/com/android/camera/async/AndroidPriorityThread.java diff --git a/src/com/android/camera/async/AndroidPriorityThread.java b/src/com/android/camera/async/AndroidPriorityThread.java new file mode 100644 index 000000000..f12bcb210 --- /dev/null +++ b/src/com/android/camera/async/AndroidPriorityThread.java @@ -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(); + } +} diff --git a/src/com/android/camera/processing/imagebackend/ImageBackend.java b/src/com/android/camera/processing/imagebackend/ImageBackend.java index 3297ff573..fdfeea578 100644 --- a/src/com/android/camera/processing/imagebackend/ImageBackend.java +++ b/src/com/android/camera/processing/imagebackend/ImageBackend.java @@ -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; } } -- cgit v1.2.3