mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-16 18:58:00 +00:00
Ad LRU to ImageCache to get a handle on memory bloat
This commit is contained in:
@@ -17,6 +17,24 @@
|
|||||||
*/
|
*/
|
||||||
package forge;
|
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.*;
|
||||||
import java.awt.geom.RoundRectangle2D;
|
import java.awt.geom.RoundRectangle2D;
|
||||||
import java.awt.image.BufferedImage;
|
import java.awt.image.BufferedImage;
|
||||||
@@ -24,27 +42,7 @@ import java.io.File;
|
|||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.concurrent.ExecutionException;
|
import java.util.concurrent.ExecutionException;
|
||||||
|
import java.util.concurrent.TimeUnit;
|
||||||
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;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This class stores ALL card images in a cache with soft values. this means
|
* 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
|
// short prefixes to save memory
|
||||||
|
|
||||||
private static final Set<String> _missingIconKeys = new HashSet<String>();
|
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;
|
private static final BufferedImage _defaultImage;
|
||||||
static {
|
static {
|
||||||
BufferedImage defImage = null;
|
BufferedImage defImage = null;
|
||||||
|
|||||||
@@ -70,6 +70,7 @@ public class ForgePreferences extends PreferencesStore<ForgePreferences.FPref> {
|
|||||||
UI_OVERLAY_CARD_MANA_COST ("true"),
|
UI_OVERLAY_CARD_MANA_COST ("true"),
|
||||||
UI_OVERLAY_CARD_ID ("true"),
|
UI_OVERLAY_CARD_ID ("true"),
|
||||||
UI_ENABLE_ONLINE_IMAGE_FETCHER ("false"),
|
UI_ENABLE_ONLINE_IMAGE_FETCHER ("false"),
|
||||||
|
UI_IMAGE_CACHE_MAXIMUM("400"),
|
||||||
UI_OVERLAY_FOIL_EFFECT ("true"),
|
UI_OVERLAY_FOIL_EFFECT ("true"),
|
||||||
UI_HIDE_REMINDER_TEXT ("false"),
|
UI_HIDE_REMINDER_TEXT ("false"),
|
||||||
UI_OPEN_PACKS_INDIV ("false"),
|
UI_OPEN_PACKS_INDIV ("false"),
|
||||||
|
|||||||
@@ -17,6 +17,8 @@
|
|||||||
*/
|
*/
|
||||||
package forge.properties;
|
package forge.properties;
|
||||||
|
|
||||||
|
import forge.util.FileUtil;
|
||||||
|
|
||||||
import java.io.BufferedWriter;
|
import java.io.BufferedWriter;
|
||||||
import java.io.FileWriter;
|
import java.io.FileWriter;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
@@ -24,8 +26,6 @@ import java.util.EnumMap;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import forge.util.FileUtil;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Holds default preference values in an enum.
|
* Holds default preference values in an enum.
|
||||||
* Loads preferred values when instantiated.
|
* Loads preferred values when instantiated.
|
||||||
@@ -109,7 +109,11 @@ public abstract class PreferencesStore<T extends Enum<T>> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public final int getPrefInt(final T fp0) {
|
public final int getPrefInt(final T fp0) {
|
||||||
|
try{
|
||||||
return Integer.parseInt(getPref(fp0));
|
return Integer.parseInt(getPref(fp0));
|
||||||
|
} catch(NumberFormatException e) {
|
||||||
|
return Integer.parseInt(getPrefDefault(fp0));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public final boolean getPrefBoolean(final T fp0) {
|
public final boolean getPrefBoolean(final T fp0) {
|
||||||
|
|||||||
Reference in New Issue
Block a user