From 41af1e31d34bedb111d951b039bce49814b77c58 Mon Sep 17 00:00:00 2001 From: Vania Desmonda Date: Thu, 12 May 2022 13:52:09 +0100 Subject: [PATCH] Prevent duplicate calls to updateSurface() and recursive call to updateSurfaceDimming(). Reduce jank by removing notifyColorsChanged() on updateSurface() which caused notifyColorsChanged() to be called multiple times successively. Test: manual, atest WallpaperManagerTest Bug: 229715857 Change-Id: I552a6956648250cd36787b7ddd79758422ea7f68 --- .../java/android/service/wallpaper/WallpaperService.java | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/core/java/android/service/wallpaper/WallpaperService.java b/core/java/android/service/wallpaper/WallpaperService.java index 425dbb9cb204d..d598017dacaa0 100644 --- a/core/java/android/service/wallpaper/WallpaperService.java +++ b/core/java/android/service/wallpaper/WallpaperService.java @@ -888,7 +888,6 @@ public abstract class WallpaperService extends Service { if (mShouldDimByDefault != mShouldDim && mWallpaperDimAmount == 0f) { mShouldDim = mShouldDimByDefault; updateSurfaceDimming(); - updateSurface(false, false, true); } } @@ -898,13 +897,16 @@ public abstract class WallpaperService extends Service { * @param dimAmount Float amount between [0.0, 1.0] to dim the wallpaper. */ private void updateWallpaperDimming(float dimAmount) { + if (dimAmount == mWallpaperDimAmount) { + return; + } + // Custom dim amount cannot be less than the default dim amount. mWallpaperDimAmount = Math.max(mDefaultDimAmount, dimAmount); // If dim amount is 0f (additional dimming is removed), then the wallpaper should dim // based on its default wallpaper color hints. mShouldDim = dimAmount != 0f || mShouldDimByDefault; updateSurfaceDimming(); - updateSurface(false, false, true); } private void updateSurfaceDimming() { @@ -941,6 +943,7 @@ public abstract class WallpaperService extends Service { } else { Log.v(TAG, "Setting wallpaper dimming: " + 0); surfaceControlTransaction.setAlpha(mBbqSurfaceControl, 1.0f).apply(); + updateSurface(false, false, true); } mPreviousWallpaperDimAmount = mWallpaperDimAmount; @@ -1195,7 +1198,6 @@ public abstract class WallpaperService extends Service { .setParent(mSurfaceControl) .setCallsite("Wallpaper#relayout") .build(); - updateSurfaceDimming(); } // Propagate transform hint from WM, so we can use the right hint for the // first frame. @@ -1366,7 +1368,6 @@ public abstract class WallpaperService extends Service { mSession.finishDrawing(mWindow, null /* postDrawTransaction */, Integer.MAX_VALUE); processLocalColors(mPendingXOffset, mPendingXOffsetStep); - notifyColorsChanged(); } reposition(); reportEngineShown(shouldWaitForEngineShown());