From b6d8a340e57c5b94e456a93070338eacf6df6086 Mon Sep 17 00:00:00 2001 From: tarsin Date: Tue, 28 Mar 2023 16:20:00 +0800 Subject: [PATCH] Cleanup lrucache create --- .../tachiyomi/ui/reader/loader/PageLoader.kt | 38 +++++-------------- 1 file changed, 10 insertions(+), 28 deletions(-) diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/loader/PageLoader.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/loader/PageLoader.kt index cc87db8e4..b5bd90e4a 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/loader/PageLoader.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/loader/PageLoader.kt @@ -1,16 +1,23 @@ package eu.kanade.tachiyomi.ui.reader.loader import androidx.annotation.CallSuper -import androidx.collection.LruCache +import androidx.collection.lruCache import com.hippo.image.Image import com.hippo.yorozuya.MathUtils import com.hippo.yorozuya.OSUtils import eu.kanade.tachiyomi.source.model.Page import eu.kanade.tachiyomi.ui.reader.model.ReaderPage +private const val MAX_CACHE_SIZE = 512 * 1024 * 1024 +private const val MIN_CACHE_SIZE = 128 * 1024 * 1024 + abstract class PageLoader { - private val mImageCache = ImageCache() + private val mImageCache = lruCache( + maxSize = (OSUtils.getTotalMemory() / 16).toInt().coerceIn(MIN_CACHE_SIZE, MAX_CACHE_SIZE), + sizeOf = { _, v -> v.size }, + onEntryRemoved = { _, _, o, _ -> o.recycle() } + ) val mPages by lazy { check(size > 0) (0 until size).map { ReaderPage(it) } @@ -82,7 +89,7 @@ abstract class PageLoader { fun notifyPageSucceed(index: Int, image: Image) { if (mImageCache[index] != image) - mImageCache.add(index, image) + mImageCache.put(index, image) mPages[index].image = image mPages[index].status.value = Page.State.READY } @@ -91,29 +98,4 @@ abstract class PageLoader { mPages[index].errorMsg = error mPages[index].status.value = Page.State.ERROR } - - private class ImageCache : LruCache( - MathUtils.clamp( - OSUtils.getTotalMemory() / 16, - MIN_CACHE_SIZE, - MAX_CACHE_SIZE - ).toInt() - ) { - fun add(key: Int, value: Image) { - put(key, value) - } - - override fun sizeOf(key: Int, value: Image): Int { - return value.size - } - - override fun entryRemoved(evicted: Boolean, key: Int, oldValue: Image, newValue: Image?) { - oldValue.recycle() - } - - companion object { - private const val MAX_CACHE_SIZE = (512 * 1024 * 1024).toLong() - private const val MIN_CACHE_SIZE = (128 * 1024 * 1024).toLong() - } - } }