From e646844623da64842e8d8b0809ed3e9e6760ed9b Mon Sep 17 00:00:00 2001 From: MM20 <15646950+MM2-0@users.noreply.github.com> Date: Tue, 16 May 2023 14:42:36 +0200 Subject: [PATCH] Store predrawn icon in weak reference --- .../main/java/de/mm20/launcher2/icons/LauncherIcon.kt | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/core/base/src/main/java/de/mm20/launcher2/icons/LauncherIcon.kt b/core/base/src/main/java/de/mm20/launcher2/icons/LauncherIcon.kt index c4f9e15f..2828ffbd 100644 --- a/core/base/src/main/java/de/mm20/launcher2/icons/LauncherIcon.kt +++ b/core/base/src/main/java/de/mm20/launcher2/icons/LauncherIcon.kt @@ -14,6 +14,7 @@ import kotlinx.coroutines.sync.Semaphore import kotlinx.coroutines.sync.withPermit import kotlinx.coroutines.withContext import palettes.TonalPalette +import java.lang.ref.WeakReference sealed interface LauncherIcon @@ -29,19 +30,19 @@ data class StaticLauncherIcon( val foregroundLayer: LauncherIconLayer, val backgroundLayer: LauncherIconLayer, ) : LauncherIcon { - private var cachedBitmap: Bitmap? = null + private var cachedBitmap: WeakReference? = null private var cachedRenderSettings: LauncherIconRenderSettings? = null private var renderSemaphore = Semaphore(1) fun getCachedBitmap(settings: LauncherIconRenderSettings): Bitmap? { - return if (cachedRenderSettings == settings) cachedBitmap else null + return if (cachedRenderSettings == settings) cachedBitmap?.get() else null } /** * Render this icon to a bitmap. */ suspend fun render(settings: LauncherIconRenderSettings): Bitmap { - val cachedBmp = cachedBitmap + val cachedBmp = cachedBitmap?.get() if (cachedRenderSettings == settings && cachedBmp != null) return cachedBmp val bmp = withContext(Dispatchers.Default) { renderSemaphore.withPermit { @@ -56,7 +57,7 @@ data class StaticLauncherIcon( }) renderLayer(canvas, backgroundLayer, settings.bgThemeColor, settings.bgTone) renderLayer(canvas, foregroundLayer, settings.fgThemeColor, settings.fgTone) - cachedBitmap = bmp + cachedBitmap = WeakReference(bmp) cachedRenderSettings = settings bmp }