Просмотр исходного кода

android: Fix fetching system memory size from MemoryUtil

We weren't rounding up the value at a unit before (GB, MB, etc) we were rounding up the total bytes and that would do nothing. This fixes that, and the check for total system memory during first emulation start where we tried to check the required system memory against 1 gigabyte.
Charles Lombardo 2 лет назад
Родитель
Сommit
9bb8ac7cb6

+ 1 - 1
src/android/app/src/main/java/org/yuzu/yuzu_emu/activities/EmulationActivity.kt

@@ -107,7 +107,7 @@ class EmulationActivity : AppCompatActivity(), SensorEventListener {
 
 
         val preferences = PreferenceManager.getDefaultSharedPreferences(YuzuApplication.appContext)
         val preferences = PreferenceManager.getDefaultSharedPreferences(YuzuApplication.appContext)
         if (!preferences.getBoolean(Settings.PREF_MEMORY_WARNING_SHOWN, false)) {
         if (!preferences.getBoolean(Settings.PREF_MEMORY_WARNING_SHOWN, false)) {
-            if (MemoryUtil.isLessThan(MemoryUtil.REQUIRED_MEMORY, MemoryUtil.Gb)) {
+            if (MemoryUtil.isLessThan(MemoryUtil.REQUIRED_MEMORY, MemoryUtil.totalMemory)) {
                 Toast.makeText(
                 Toast.makeText(
                     this,
                     this,
                     getString(
                     getString(

+ 16 - 18
src/android/app/src/main/java/org/yuzu/yuzu_emu/utils/MemoryUtil.kt

@@ -27,7 +27,7 @@ object MemoryUtil {
     const val Pb = Tb * 1024
     const val Pb = Tb * 1024
     const val Eb = Pb * 1024
     const val Eb = Pb * 1024
 
 
-    private fun bytesToSizeUnit(size: Float): String =
+    private fun bytesToSizeUnit(size: Float, roundUp: Boolean = false): String =
         when {
         when {
             size < Kb -> {
             size < Kb -> {
                 context.getString(
                 context.getString(
@@ -39,63 +39,59 @@ object MemoryUtil {
             size < Mb -> {
             size < Mb -> {
                 context.getString(
                 context.getString(
                     R.string.memory_formatted,
                     R.string.memory_formatted,
-                    (size / Kb).hundredths,
+                    if (roundUp) ceil(size / Kb) else (size / Kb).hundredths,
                     context.getString(R.string.memory_kilobyte)
                     context.getString(R.string.memory_kilobyte)
                 )
                 )
             }
             }
             size < Gb -> {
             size < Gb -> {
                 context.getString(
                 context.getString(
                     R.string.memory_formatted,
                     R.string.memory_formatted,
-                    (size / Mb).hundredths,
+                    if (roundUp) ceil(size / Mb) else (size / Mb).hundredths,
                     context.getString(R.string.memory_megabyte)
                     context.getString(R.string.memory_megabyte)
                 )
                 )
             }
             }
             size < Tb -> {
             size < Tb -> {
                 context.getString(
                 context.getString(
                     R.string.memory_formatted,
                     R.string.memory_formatted,
-                    (size / Gb).hundredths,
+                    if (roundUp) ceil(size / Gb) else (size / Gb).hundredths,
                     context.getString(R.string.memory_gigabyte)
                     context.getString(R.string.memory_gigabyte)
                 )
                 )
             }
             }
             size < Pb -> {
             size < Pb -> {
                 context.getString(
                 context.getString(
                     R.string.memory_formatted,
                     R.string.memory_formatted,
-                    (size / Tb).hundredths,
+                    if (roundUp) ceil(size / Tb) else (size / Tb).hundredths,
                     context.getString(R.string.memory_terabyte)
                     context.getString(R.string.memory_terabyte)
                 )
                 )
             }
             }
             size < Eb -> {
             size < Eb -> {
                 context.getString(
                 context.getString(
                     R.string.memory_formatted,
                     R.string.memory_formatted,
-                    (size / Pb).hundredths,
+                    if (roundUp) ceil(size / Pb) else (size / Pb).hundredths,
                     context.getString(R.string.memory_petabyte)
                     context.getString(R.string.memory_petabyte)
                 )
                 )
             }
             }
             else -> {
             else -> {
                 context.getString(
                 context.getString(
                     R.string.memory_formatted,
                     R.string.memory_formatted,
-                    (size / Eb).hundredths,
+                    if (roundUp) ceil(size / Eb) else (size / Eb).hundredths,
                     context.getString(R.string.memory_exabyte)
                     context.getString(R.string.memory_exabyte)
                 )
                 )
             }
             }
         }
         }
 
 
-    // Devices are unlikely to have 0.5GB increments of memory so we'll just round up to account for
-    // the potential error created by memInfo.totalMem
-    private val totalMemory: Float
+    val totalMemory: Float
         get() {
         get() {
             val memInfo = ActivityManager.MemoryInfo()
             val memInfo = ActivityManager.MemoryInfo()
             with(context.getSystemService(Context.ACTIVITY_SERVICE) as ActivityManager) {
             with(context.getSystemService(Context.ACTIVITY_SERVICE) as ActivityManager) {
                 getMemoryInfo(memInfo)
                 getMemoryInfo(memInfo)
             }
             }
 
 
-            return ceil(
-                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) {
-                    memInfo.advertisedMem.toFloat()
-                } else {
-                    memInfo.totalMem.toFloat()
-                }
-            )
+            return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) {
+                memInfo.advertisedMem.toFloat()
+            } else {
+                memInfo.totalMem.toFloat()
+            }
         }
         }
 
 
     fun isLessThan(minimum: Int, size: Float): Boolean =
     fun isLessThan(minimum: Int, size: Float): Boolean =
@@ -109,5 +105,7 @@ object MemoryUtil {
             else -> totalMemory < Kb && totalMemory < minimum
             else -> totalMemory < Kb && totalMemory < minimum
         }
         }
 
 
-    fun getDeviceRAM(): String = bytesToSizeUnit(totalMemory)
+    // Devices are unlikely to have 0.5GB increments of memory so we'll just round up to account for
+    // the potential error created by memInfo.totalMem
+    fun getDeviceRAM(): String = bytesToSizeUnit(totalMemory, true)
 }
 }