Update DiskShaderCacheProgress.kt

This commit is contained in:
MNCHL 2023-12-05 22:17:49 +08:00 committed by GitHub
parent 7297cc1ad5
commit 4f60f05ca7
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -5,46 +5,63 @@ package org.yuzu.yuzu_emu.disk_shader_cache
import androidx.annotation.Keep import androidx.annotation.Keep
import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.ViewModelProvider
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import org.yuzu.yuzu_emu.NativeLibrary import org.yuzu.yuzu_emu.NativeLibrary
import org.yuzu.yuzu_emu.R import org.yuzu.yuzu_emu.R
import org.yuzu.yuzu_emu.activities.EmulationActivity import org.yuzu.yuzu_emu.activities.EmulationActivity
import org.yuzu.yuzu_emu.model.EmulationViewModel import org.yuzu.yuzu_emu.model.EmulationViewModel
import org.yuzu.yuzu_emu.utils.Log
@Keep @Keep
object DiskShaderCacheProgress { object DiskShaderCacheProgress {
private lateinit var emulationViewModel: EmulationViewModel private lateinit var emulationViewModel: EmulationViewModel
private lateinit var emulationActivity: EmulationActivity
private fun prepareViewModel() { private fun prepareViewModel() {
emulationViewModel = val activity = NativeLibrary.sEmulationActivity.get() as? EmulationActivity
ViewModelProvider( ?: throw IllegalStateException("EmulationActivity 不存在")
NativeLibrary.sEmulationActivity.get() as EmulationActivity emulationActivity = activity
)[EmulationViewModel::class.java] emulationViewModel = ViewModelProvider(emulationActivity)[EmulationViewModel::class.java]
} }
@JvmStatic @JvmStatic
fun loadProgress(stage: Int, progress: Int, max: Int) { fun loadProgress(stage: Int, progress: Int, max: Int) {
val emulationActivity = NativeLibrary.sEmulationActivity.get() val activity = NativeLibrary.sEmulationActivity.get() as? EmulationActivity
if (emulationActivity == null) { ?: return
Log.error("[DiskShaderCacheProgress] EmulationActivity not present")
return
}
emulationActivity.runOnUiThread { when (LoadCallbackStage.values()[stage]) {
when (LoadCallbackStage.values()[stage]) { LoadCallbackStage.Prepare -> {
LoadCallbackStage.Prepare -> prepareViewModel() prepareViewModel()
LoadCallbackStage.Build -> emulationViewModel.updateProgress( showMessage(activity.getString(R.string.prepare_loading_message))
emulationActivity.getString(R.string.building_shaders),
progress,
max
)
LoadCallbackStage.Complete -> {}
} }
LoadCallbackStage.Build -> {
GlobalScope.launch(Dispatchers.Main) {
updateProgressAsync(activity.getString(R.string.building_shaders), progress, max)
}
}
LoadCallbackStage.Complete -> {}
} }
} }
// Equivalent to VideoCore::LoadCallbackStage private suspend fun updateProgressAsync(title: String, progress: Int, max: Int) {
withContext(Dispatchers.Main) {
showMessage("$title:异步进度执行中")
}
// 模拟一些处理时间
kotlinx.coroutines.delay(1000)
withContext(Dispatchers.Main) {
emulationViewModel.updateProgress(title, progress, max)
}
}
private fun showMessage(message: String) {
emulationActivity.showToast(message)
}
enum class LoadCallbackStage { enum class LoadCallbackStage {
Prepare, Build, Complete Prepare, Build, Complete
} }