diff options
author | Sunny Goyal <sunnygoyal@google.com> | 2015-09-23 10:16:38 -0700 |
---|---|---|
committer | Sunny Goyal <sunnygoyal@google.com> | 2015-09-23 10:48:50 -0700 |
commit | 7ca991104e3ac2e99fcde5599416f82b4d66aad1 (patch) | |
tree | 29713fd569eb73d18ff3b808d4ea01694761eb9a /src/com/android/launcher3/WidgetPreviewLoader.java | |
parent | b3fff9d98a3e3c886d4efa912d7ad6753dd7ec9c (diff) | |
download | android_packages_apps_Trebuchet-7ca991104e3ac2e99fcde5599416f82b4d66aad1.tar.gz android_packages_apps_Trebuchet-7ca991104e3ac2e99fcde5599416f82b4d66aad1.tar.bz2 android_packages_apps_Trebuchet-7ca991104e3ac2e99fcde5599416f82b4d66aad1.zip |
Using an executor with increased queue size for loading previews
An async task can be in the queue even if it has been cancelled. It
is removed only after it gets executed once. So the executor can get
blocked if there are some tasks which are running, and we keep posting
and cancelling preview load tasks.
Bug: 24306650
Change-Id: I836c8d53258542cc6f31952dff84323cc057437c
Diffstat (limited to 'src/com/android/launcher3/WidgetPreviewLoader.java')
-rw-r--r-- | src/com/android/launcher3/WidgetPreviewLoader.java | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/src/com/android/launcher3/WidgetPreviewLoader.java b/src/com/android/launcher3/WidgetPreviewLoader.java index 346055566..e13d44c9b 100644 --- a/src/com/android/launcher3/WidgetPreviewLoader.java +++ b/src/com/android/launcher3/WidgetPreviewLoader.java @@ -43,12 +43,25 @@ import java.util.Set; import java.util.WeakHashMap; import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; +import java.util.concurrent.Executor; +import java.util.concurrent.LinkedBlockingQueue; +import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.TimeUnit; public class WidgetPreviewLoader { private static final String TAG = "WidgetPreviewLoader"; private static final boolean DEBUG = false; + // These values are same as that in {@link AsyncTask}. + private static final int CPU_COUNT = Runtime.getRuntime().availableProcessors(); + private static final int CORE_POOL_SIZE = CPU_COUNT + 1; + private static final int MAXIMUM_POOL_SIZE = CPU_COUNT * 2 + 1; + private static final int KEEP_ALIVE = 1; + private static final Executor PREVIEW_LOAD_EXECUTOR = new ThreadPoolExecutor( + CORE_POOL_SIZE, MAXIMUM_POOL_SIZE, KEEP_ALIVE, + TimeUnit.SECONDS, new LinkedBlockingQueue<Runnable>()); + private static final float WIDGET_PREVIEW_ICON_PADDING_PERCENTAGE = 0.25f; private final HashMap<String, long[]> mPackageVersions = new HashMap<>(); @@ -96,7 +109,7 @@ public class WidgetPreviewLoader { WidgetCacheKey key = getObjectKey(o, size); PreviewLoadTask task = new PreviewLoadTask(key, o, previewWidth, previewHeight, caller); - task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); + task.executeOnExecutor(PREVIEW_LOAD_EXECUTOR); return new PreviewLoadRequest(task); } |