Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e98f4a4d authored by Hyunyoung Song's avatar Hyunyoung Song
Browse files

Fix last bit of WidgetTray jank issue

b/21133230

Change-Id: Ic198b8d21be1b0f3465cd4efc30a240e3ec4304a
parent 0fc56db0
Loading
Loading
Loading
Loading
+20 −8
Original line number Diff line number Diff line
@@ -55,6 +55,8 @@ public class WidgetPreviewLoader {
    /**
     * Weak reference objects, do not prevent their referents from being made finalizable,
     * finalized, and then reclaimed.
     * Note: synchronized block used for this variable is expensive and the block should always
     * be posted to a background thread.
     */
    @Thunk Set<Bitmap> mUnusedBitmaps =
            Collections.newSetFromMap(new WeakHashMap<Bitmap, Boolean>());
@@ -554,11 +556,16 @@ public class WidgetPreviewLoader {
            // in the tasks's onCancelled() call, and if cancelled while the task is writing to
            // disk, it will be cancelled in the task's onPostExecute() call.
            if (mTask.mBitmapToRecycle != null) {
                mWorkerHandler.post(new Runnable() {
                    @Override
                    public void run() {
                        synchronized (mUnusedBitmaps) {
                            mUnusedBitmaps.add(mTask.mBitmapToRecycle);
                        }
                        mTask.mBitmapToRecycle = null;
                    }
                });
            }
        }
    }

@@ -660,15 +667,20 @@ public class WidgetPreviewLoader {
        }

        @Override
        protected void onCancelled(Bitmap preview) {
        protected void onCancelled(final Bitmap preview) {
            // If we've cancelled while the task is running, then can return the bitmap to the
            // recycled set immediately. Otherwise, it will be recycled after the preview is written
            // to disk.
            if (preview != null) {
                mWorkerHandler.post(new Runnable() {
                    @Override
                    public void run() {
                        synchronized (mUnusedBitmaps) {
                            mUnusedBitmaps.add(preview);
                        }
                    }
                });
            }
        }
    }