From 3f767f2a8eb20a2c8f28ae510c6682e14adcec4f Mon Sep 17 00:00:00 2001 From: Jay Aliomer Date: Tue, 15 Jun 2021 15:15:50 -0400 Subject: [PATCH] Load wallpaper bitmap once instead of twice Fixes: 189976068 Test: visual Change-Id: I97eba1c58a485b18fbdd93fce04d87df2f95552e --- .../com/android/systemui/ImageWallpaper.java | 32 ++++++++----------- .../glwallpaper/ImageWallpaperRenderer.java | 8 +++-- 2 files changed, 19 insertions(+), 21 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/ImageWallpaper.java b/packages/SystemUI/src/com/android/systemui/ImageWallpaper.java index 64a683e78953a..a68f79604b25f 100644 --- a/packages/SystemUI/src/com/android/systemui/ImageWallpaper.java +++ b/packages/SystemUI/src/com/android/systemui/ImageWallpaper.java @@ -130,10 +130,7 @@ public class ImageWallpaper extends WallpaperService { .getBounds(); mHeight = window.height(); mWidth = window.width(); - mMiniBitmap = null; - if (mWorker != null && mWorker.getThreadHandler() != null) { - mWorker.getThreadHandler().post(this::updateMiniBitmap); - } + mRenderer.setOnBitmapChanged(this::updateMiniBitmap); } EglHelper getEglHelperInstance() { @@ -177,20 +174,19 @@ public class ImageWallpaper extends WallpaperService { mPageOffset = (1 - imgWidth) / (float) (mPages - 1); } - private void updateMiniBitmap() { - mRenderer.useBitmap(b -> { - int size = Math.min(b.getWidth(), b.getHeight()); - float scale = 1.0f; - if (size > MIN_SURFACE_WIDTH) { - scale = (float) MIN_SURFACE_WIDTH / (float) size; - } - mImgHeight = b.getHeight(); - mImgWidth = b.getWidth(); - mMiniBitmap = Bitmap.createScaledBitmap(b, (int) Math.max(scale * b.getWidth(), 1), - (int) Math.max(scale * b.getHeight(), 1), false); - computeAndNotifyLocalColors(mLocalColorsToAdd, mMiniBitmap); - mLocalColorsToAdd.clear(); - }); + private void updateMiniBitmap(Bitmap b) { + if (b == null) return; + int size = Math.min(b.getWidth(), b.getHeight()); + float scale = 1.0f; + if (size > MIN_SURFACE_WIDTH) { + scale = (float) MIN_SURFACE_WIDTH / (float) size; + } + mImgHeight = b.getHeight(); + mImgWidth = b.getWidth(); + mMiniBitmap = Bitmap.createScaledBitmap(b, (int) Math.max(scale * b.getWidth(), 1), + (int) Math.max(scale * b.getHeight(), 1), false); + computeAndNotifyLocalColors(mLocalColorsToAdd, mMiniBitmap); + mLocalColorsToAdd.clear(); } private void updateSurfaceSize() { diff --git a/packages/SystemUI/src/com/android/systemui/glwallpaper/ImageWallpaperRenderer.java b/packages/SystemUI/src/com/android/systemui/glwallpaper/ImageWallpaperRenderer.java index 01a353ce8f1f7..d30783c29f926 100644 --- a/packages/SystemUI/src/com/android/systemui/glwallpaper/ImageWallpaperRenderer.java +++ b/packages/SystemUI/src/com/android/systemui/glwallpaper/ImageWallpaperRenderer.java @@ -46,6 +46,7 @@ public class ImageWallpaperRenderer implements GLWallpaperRenderer { private final ImageGLWallpaper mWallpaper; private final Rect mSurfaceSize = new Rect(); private final WallpaperTexture mTexture; + private Consumer mOnBitmapUpdated; public ImageWallpaperRenderer(Context context) { final WallpaperManager wpm = context.getSystemService(WallpaperManager.class); @@ -60,10 +61,9 @@ public class ImageWallpaperRenderer implements GLWallpaperRenderer { /** * @hide - * @return */ - public void useBitmap(Consumer c) { - mTexture.use(c); + public void setOnBitmapChanged(Consumer c) { + mOnBitmapUpdated = c; } @Override @@ -80,6 +80,8 @@ public class ImageWallpaperRenderer implements GLWallpaperRenderer { mTexture.use(bitmap -> { if (bitmap == null) { Log.w(TAG, "reload texture failed!"); + } else if (mOnBitmapUpdated != null) { + mOnBitmapUpdated.accept(bitmap); } mWallpaper.setup(bitmap); });