Solving one of the OutOfMemory erros (too many translators instantiated at the same time)

This commit is contained in:
Vitor Pamplona 2023-10-20 18:11:09 -04:00
parent 893b88246e
commit 3321448dd2
5 changed files with 21 additions and 8 deletions

View File

@ -0,0 +1,5 @@
package com.vitorpamplona.amethyst.service.lang
object LanguageTranslatorService {
fun clear() {}
}

View File

@ -5,7 +5,6 @@ import android.os.StrictMode
import android.os.StrictMode.ThreadPolicy
import android.os.StrictMode.VmPolicy
import android.util.Log
import androidx.media3.common.util.UnstableApi
import coil.ImageLoader
import com.vitorpamplona.amethyst.service.playback.VideoCache
import kotlinx.coroutines.Dispatchers
@ -13,7 +12,7 @@ import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.launch
import kotlin.time.measureTimedValue
@UnstableApi class Amethyst : Application() {
class Amethyst : Application() {
val videoCache: VideoCache by lazy {
val newCache = VideoCache()
newCache.initFileCache(instance)

View File

@ -1,7 +1,7 @@
package com.vitorpamplona.amethyst.service.playback
import android.annotation.SuppressLint
import android.content.Context
import androidx.media3.common.util.UnstableApi
import androidx.media3.database.StandaloneDatabaseProvider
import androidx.media3.datasource.cache.CacheDataSource
import androidx.media3.datasource.cache.LeastRecentlyUsedCacheEvictor
@ -10,7 +10,8 @@ import androidx.media3.datasource.okhttp.OkHttpDataSource
import okhttp3.OkHttpClient
import java.io.File
@UnstableApi class VideoCache {
@SuppressLint("UnsafeOptInUsageError")
class VideoCache {
var exoPlayerCacheSize: Long = 150 * 1024 * 1024 // 90MB

View File

@ -23,6 +23,7 @@ import androidx.lifecycle.viewmodel.compose.viewModel
import com.vitorpamplona.amethyst.LocalPreferences
import com.vitorpamplona.amethyst.ServiceManager
import com.vitorpamplona.amethyst.service.ExternalSignerUtils
import com.vitorpamplona.amethyst.service.lang.LanguageTranslatorService
import com.vitorpamplona.amethyst.service.notifications.PushNotificationUtils
import com.vitorpamplona.amethyst.ui.components.DefaultMutedSetting
import com.vitorpamplona.amethyst.ui.components.keepPlayingMutex
@ -104,7 +105,9 @@ class MainActivity : AppCompatActivity() {
}
override fun onPause() {
LanguageTranslatorService.clear()
ServiceManager.cleanObservers()
// if (BuildConfig.DEBUG) {
GlobalScope.launch(Dispatchers.IO) {
debugState(this@MainActivity)

View File

@ -24,7 +24,7 @@ data class ResultOrError(
)
object LanguageTranslatorService {
var executorService = Executors.newScheduledThreadPool(5)
var executorService = Executors.newScheduledThreadPool(3)
private val options = LanguageIdentificationOptions.Builder().setExecutor(executorService).setConfidenceThreshold(0.6f).build()
private val languageIdentification = LanguageIdentification.getClient(options)
@ -32,7 +32,7 @@ object LanguageTranslatorService {
val tagRegex = Pattern.compile("(nostr:)?@?(nsec1|npub1|nevent1|naddr1|note1|nprofile1|nrelay1)([qpzry9x8gf2tvdw0s3jn54khce6mua7l]+)", Pattern.CASE_INSENSITIVE)
private val translators =
object : LruCache<TranslatorOptions, Translator>(20) {
object : LruCache<TranslatorOptions, Translator>(3) {
override fun create(options: TranslatorOptions): Translator {
return Translation.getClient(options)
}
@ -47,6 +47,10 @@ object LanguageTranslatorService {
}
}
fun clear() {
translators.evictAll()
}
fun identifyLanguage(text: String): Task<String> {
return languageIdentification.identifyLanguage(text)
}
@ -61,6 +65,7 @@ object LanguageTranslatorService {
}
val options = TranslatorOptions.Builder()
.setExecutor(executorService)
.setSourceLanguage(sourceLangCode)
.setTargetLanguage(targetLangCode)
.build()
@ -116,7 +121,7 @@ object LanguageTranslatorService {
val short = "A$counter"
counter++
returningList.put(short, tag)
} catch (e: Exception) {
} catch (_: Exception) {
}
}
return returningList
@ -132,7 +137,7 @@ object LanguageTranslatorService {
val short = "A$counter"
counter++
returningList.put(short, lnInvoice)
} catch (e: Exception) {
} catch (_: Exception) {
}
}
return returningList