From 9e00fcd8d84d17d064499d9a1a98a4007203874c Mon Sep 17 00:00:00 2001 From: Anthony Calosa Date: Tue, 6 Oct 2020 10:16:50 +0800 Subject: [PATCH] [Android] Increase default cache size -Increase the default cache size depending on the device detected RAM (higher end tablets and phones will have greater benefit for having large RAM). --- forge-gui-android/src/forge/app/Main.java | 15 +++++++++++---- forge-gui-ios/src/forge/ios/Main.java | 4 ++-- forge-gui-mobile-dev/src/forge/app/Main.java | 4 ++-- forge-gui-mobile/src/forge/Forge.java | 16 +++++++++++++--- .../src/forge/assets/ImageCache.java | 2 +- 5 files changed, 29 insertions(+), 12 deletions(-) diff --git a/forge-gui-android/src/forge/app/Main.java b/forge-gui-android/src/forge/app/Main.java index 9337d030041..3f82b2eccf6 100644 --- a/forge-gui-android/src/forge/app/Main.java +++ b/forge-gui-android/src/forge/app/Main.java @@ -1,5 +1,6 @@ package forge.app; +import android.app.ActivityManager; import android.app.AlarmManager; import android.app.AlertDialog; import android.app.PendingIntent; @@ -56,9 +57,15 @@ public class Main extends AndroidApplication { protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + //get total device RAM in mb + ActivityManager actManager = (ActivityManager) getSystemService(ACTIVITY_SERVICE); + ActivityManager.MemoryInfo memInfo = new ActivityManager.MemoryInfo(); + actManager.getMemoryInfo(memInfo); + int totalMemory = Math.round(memInfo.totalMem / 1024f / 1024f); + boolean permissiongranted = checkPermission(); Gadapter = new AndroidAdapter(this.getContext()); - initForge(Gadapter, permissiongranted); + initForge(Gadapter, permissiongranted, totalMemory); //permission if(!permissiongranted){ @@ -185,7 +192,7 @@ public class Main extends AndroidApplication { builder.show(); } - private void initForge(AndroidAdapter adapter, boolean permissiongranted){ + private void initForge(AndroidAdapter adapter, boolean permissiongranted, int totalRAM){ boolean isPortrait; if (permissiongranted){ //establish assets directory @@ -225,12 +232,12 @@ public class Main extends AndroidApplication { Main.this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); } - initialize(Forge.getApp(new AndroidClipboard(), adapter, assetsDir, propertyConfig, isPortrait)); + initialize(Forge.getApp(new AndroidClipboard(), adapter, assetsDir, propertyConfig, isPortrait, totalRAM)); } else { isPortrait = true; //set current orientation Main.this.setRequestedOrientation(Main.this.getResources().getConfiguration().orientation); - initialize(Forge.getApp(new AndroidClipboard(), adapter, "", false, isPortrait)); + initialize(Forge.getApp(new AndroidClipboard(), adapter, "", false, isPortrait, totalRAM)); } } diff --git a/forge-gui-ios/src/forge/ios/Main.java b/forge-gui-ios/src/forge/ios/Main.java index 57fe63bc77c..948adfc66fe 100644 --- a/forge-gui-ios/src/forge/ios/Main.java +++ b/forge-gui-ios/src/forge/ios/Main.java @@ -32,8 +32,8 @@ public class Main extends IOSApplication.Delegate { config.useAccelerometer = false; config.useCompass = false; ForgePreferences prefs = FModel.getPreferences(); - boolean propertyConfig = prefs != null && prefs.getPrefBoolean(ForgePreferences.FPref.UI_NETPLAY_COMPAT); - final ApplicationListener app = Forge.getApp(new IOSClipboard(), new IOSAdapter(), assetsDir, propertyConfig, false); + boolean propertyConfig = prefs != null && prefs.getPrefBoolean(ForgePreferences.FPref.UI_NETPLAY_COMPAT);//todo get totalRAM + final ApplicationListener app = Forge.getApp(new IOSClipboard(), new IOSAdapter(), assetsDir, propertyConfig, false, 0); final IOSApplication iosApp = new IOSApplication(app, config); return iosApp; } diff --git a/forge-gui-mobile-dev/src/forge/app/Main.java b/forge-gui-mobile-dev/src/forge/app/Main.java index 620209f7d74..9b84d0fa53c 100644 --- a/forge-gui-mobile-dev/src/forge/app/Main.java +++ b/forge-gui-mobile-dev/src/forge/app/Main.java @@ -96,8 +96,8 @@ public class Main { ForgePreferences prefs = FModel.getPreferences(); boolean propertyConfig = prefs != null && prefs.getPrefBoolean(ForgePreferences.FPref.UI_NETPLAY_COMPAT); - new LwjglApplication(Forge.getApp(new LwjglClipboard(), new DesktopAdapter(switchOrientationFile), - desktopMode ? desktopModeAssetsDir : assetsDir, propertyConfig, false), config); + new LwjglApplication(Forge.getApp(new LwjglClipboard(), new DesktopAdapter(switchOrientationFile),//todo get totalRAM + desktopMode ? desktopModeAssetsDir : assetsDir, propertyConfig, false, 0), config); } private static class DesktopAdapter implements IDeviceAdapter { diff --git a/forge-gui-mobile/src/forge/Forge.java b/forge-gui-mobile/src/forge/Forge.java index 35f256d91c0..f19957538d0 100644 --- a/forge-gui-mobile/src/forge/Forge.java +++ b/forge-gui-mobile/src/forge/Forge.java @@ -71,14 +71,20 @@ public class Forge implements ApplicationListener { public static boolean hdstart = false; public static boolean isPortraitMode = false; public static boolean gameInProgress = false; + public static int cacheSize = 400; + public static int totalDeviceRAM = 0; - public static ApplicationListener getApp(Clipboard clipboard0, IDeviceAdapter deviceAdapter0, String assetDir0, boolean value, boolean androidOrientation) { + public static ApplicationListener getApp(Clipboard clipboard0, IDeviceAdapter deviceAdapter0, String assetDir0, boolean value, boolean androidOrientation, int totalRAM) { if (GuiBase.getInterface() == null) { clipboard = clipboard0; deviceAdapter = deviceAdapter0; GuiBase.setInterface(new GuiMobile(assetDir0)); GuiBase.enablePropertyConfig(value); isPortraitMode = androidOrientation; + totalDeviceRAM = totalRAM; + //increase cacheSize for devices with RAM more than 5GB, default is 400. Some phones have more than 10GB RAM (Mi 10, OnePlus 8, S20, etc..) + if (totalDeviceRAM>5000) //devices with more than 10GB RAM will have 1000 Cache size, 700 Cache size for morethan 5GB RAM + cacheSize = totalDeviceRAM>10000 ? 1000: 700; } return app; } @@ -142,8 +148,12 @@ public class Forge implements ApplicationListener { splashScreen.getProgressBar().setDescription(localizer.getMessage("lblFinishingStartup")); //add reminder to preload - if (enablePreloadExtendedArt) - splashScreen.getProgressBar().setDescription(localizer.getMessage("lblPreloadExtendedArt")); + if (enablePreloadExtendedArt) { + splashScreen.getProgressBar().setDescription(localizer.getMessage("lblPreloadExtendedArt")+"\nDetected RAM: " +totalDeviceRAM+"MB. Cache size: "+cacheSize); + } else { + splashScreen.getProgressBar().setDescription(localizer.getMessage("lblFinishingStartup")+"\nDetected RAM: " +totalDeviceRAM+"MB. Cache size: "+cacheSize); + } + Gdx.app.postRunnable(new Runnable() { @Override public void run() { diff --git a/forge-gui-mobile/src/forge/assets/ImageCache.java b/forge-gui-mobile/src/forge/assets/ImageCache.java index 57856966c9b..73e47c95abf 100644 --- a/forge-gui-mobile/src/forge/assets/ImageCache.java +++ b/forge-gui-mobile/src/forge/assets/ImageCache.java @@ -69,7 +69,7 @@ public class ImageCache { private static final Set missingIconKeys = new HashSet<>(); private static final LoadingCache cache = CacheBuilder.newBuilder() - .maximumSize(400) + .maximumSize(Forge.cacheSize) .expireAfterAccess(15, TimeUnit.MINUTES) .removalListener(new RemovalListener() { @Override