Release lock before color extraction on dim changes

notifyWallpaperColorsChanged should always be called outside the lock
since it may trigger heavy color computations.

This is necessary in order to remove the old code paths of
clearWallpaperLocked without causing boot time regressions.

Flag: lockscreen live wallpaper
Bug: 273443374
Test: atest WallpaperManagerTest
Change-Id: Ib2b6dde8b65058874d2a4c014fa7de47320e6457
This commit is contained in:
Aurélien Pomini
2023-07-17 17:31:06 +00:00
parent 00f62accd7
commit 96e2ff4002

View File

@@ -2895,6 +2895,7 @@ public class WallpaperManagerService extends IWallpaperManager.Stub
checkPermission(android.Manifest.permission.SET_WALLPAPER_DIM_AMOUNT);
final long ident = Binder.clearCallingIdentity();
try {
List<WallpaperData> pendingColorExtraction = new ArrayList<>();
synchronized (mLock) {
WallpaperData wallpaper = mWallpaperMap.get(mCurrentUserId);
WallpaperData lockWallpaper = mLockWallpaperMap.get(mCurrentUserId);
@@ -2930,7 +2931,7 @@ public class WallpaperManagerService extends IWallpaperManager.Stub
// Need to extract colors again to re-calculate dark hints after
// applying dimming.
wp.mIsColorExtractedFromDim = true;
notifyWallpaperColorsChanged(wp, wp.mWhich);
pendingColorExtraction.add(wp);
changed = true;
}
}
@@ -2962,6 +2963,9 @@ public class WallpaperManagerService extends IWallpaperManager.Stub
}
}
}
for (WallpaperData wp: pendingColorExtraction) {
notifyWallpaperColorsChanged(wp, wp.mWhich);
}
} finally {
Binder.restoreCallingIdentity(ident);
}