mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-14 09:48:02 +00:00
Ad LRU to ImageCache to get a handle on memory bloat
This commit is contained in:
@@ -17,6 +17,24 @@
|
||||
*/
|
||||
package forge;
|
||||
|
||||
import com.google.common.cache.CacheBuilder;
|
||||
import com.google.common.cache.CacheLoader.InvalidCacheLoadException;
|
||||
import com.google.common.cache.LoadingCache;
|
||||
import com.mortennobel.imagescaling.ResampleOp;
|
||||
import forge.assets.FSkinProp;
|
||||
import forge.game.card.CardView;
|
||||
import forge.game.player.PlayerView;
|
||||
import forge.item.InventoryItem;
|
||||
import forge.model.FModel;
|
||||
import forge.properties.ForgeConstants;
|
||||
import forge.properties.ForgePreferences;
|
||||
import forge.properties.ForgePreferences.FPref;
|
||||
import forge.toolbox.FSkin;
|
||||
import forge.toolbox.FSkin.SkinIcon;
|
||||
import forge.util.ImageUtil;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
import javax.imageio.ImageIO;
|
||||
import java.awt.*;
|
||||
import java.awt.geom.RoundRectangle2D;
|
||||
import java.awt.image.BufferedImage;
|
||||
@@ -24,27 +42,7 @@ import java.io.File;
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.ExecutionException;
|
||||
|
||||
import javax.imageio.ImageIO;
|
||||
|
||||
import forge.properties.ForgePreferences;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
import com.google.common.cache.CacheBuilder;
|
||||
import com.google.common.cache.CacheLoader.InvalidCacheLoadException;
|
||||
import com.google.common.cache.LoadingCache;
|
||||
import com.mortennobel.imagescaling.ResampleOp;
|
||||
|
||||
import forge.assets.FSkinProp;
|
||||
import forge.game.card.CardView;
|
||||
import forge.game.player.PlayerView;
|
||||
import forge.item.InventoryItem;
|
||||
import forge.model.FModel;
|
||||
import forge.properties.ForgeConstants;
|
||||
import forge.properties.ForgePreferences.FPref;
|
||||
import forge.toolbox.FSkin;
|
||||
import forge.toolbox.FSkin.SkinIcon;
|
||||
import forge.util.ImageUtil;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
/**
|
||||
* This class stores ALL card images in a cache with soft values. this means
|
||||
@@ -64,7 +62,10 @@ public class ImageCache {
|
||||
// short prefixes to save memory
|
||||
|
||||
private static final Set<String> _missingIconKeys = new HashSet<String>();
|
||||
private static final LoadingCache<String, BufferedImage> _CACHE = CacheBuilder.newBuilder().softValues().build(new ImageLoader());
|
||||
private static final LoadingCache<String, BufferedImage> _CACHE = CacheBuilder.newBuilder()
|
||||
.maximumSize(FModel.getPreferences().getPrefInt((FPref.UI_IMAGE_CACHE_MAXIMUM)))
|
||||
.expireAfterAccess(15, TimeUnit.MINUTES)
|
||||
.build(new ImageLoader());
|
||||
private static final BufferedImage _defaultImage;
|
||||
static {
|
||||
BufferedImage defImage = null;
|
||||
|
||||
@@ -70,6 +70,7 @@ public class ForgePreferences extends PreferencesStore<ForgePreferences.FPref> {
|
||||
UI_OVERLAY_CARD_MANA_COST ("true"),
|
||||
UI_OVERLAY_CARD_ID ("true"),
|
||||
UI_ENABLE_ONLINE_IMAGE_FETCHER ("false"),
|
||||
UI_IMAGE_CACHE_MAXIMUM("400"),
|
||||
UI_OVERLAY_FOIL_EFFECT ("true"),
|
||||
UI_HIDE_REMINDER_TEXT ("false"),
|
||||
UI_OPEN_PACKS_INDIV ("false"),
|
||||
@@ -125,7 +126,7 @@ public class ForgePreferences extends PreferencesStore<ForgePreferences.FPref> {
|
||||
UI_DISABLE_IMAGES_EFFECT_CARDS("false"),
|
||||
UI_ALLOW_ORDER_GRAVEYARD_WHEN_NEEDED ("Never"),
|
||||
UI_DEFAULT_FONT_SIZE("12"),
|
||||
UI_SELECT_FROM_CARD_DISPLAYS("true"),
|
||||
UI_SELECT_FROM_CARD_DISPLAYS("true"),
|
||||
UI_FOR_TOUCHSCREN("false"),
|
||||
|
||||
UI_VIBRATE_ON_LIFE_LOSS("true"),
|
||||
|
||||
@@ -17,6 +17,8 @@
|
||||
*/
|
||||
package forge.properties;
|
||||
|
||||
import forge.util.FileUtil;
|
||||
|
||||
import java.io.BufferedWriter;
|
||||
import java.io.FileWriter;
|
||||
import java.io.IOException;
|
||||
@@ -24,8 +26,6 @@ import java.util.EnumMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import forge.util.FileUtil;
|
||||
|
||||
/**
|
||||
* Holds default preference values in an enum.
|
||||
* Loads preferred values when instantiated.
|
||||
@@ -109,7 +109,11 @@ public abstract class PreferencesStore<T extends Enum<T>> {
|
||||
}
|
||||
|
||||
public final int getPrefInt(final T fp0) {
|
||||
return Integer.parseInt(getPref(fp0));
|
||||
try{
|
||||
return Integer.parseInt(getPref(fp0));
|
||||
} catch(NumberFormatException e) {
|
||||
return Integer.parseInt(getPrefDefault(fp0));
|
||||
}
|
||||
}
|
||||
|
||||
public final boolean getPrefBoolean(final T fp0) {
|
||||
|
||||
Reference in New Issue
Block a user