From 41580d058bbf06595164841474c9c65a46aa3322 Mon Sep 17 00:00:00 2001 From: Matthew Messinger Date: Mon, 24 Jun 2019 20:08:51 -0400 Subject: [PATCH] Remove Chronic in favor for guava caches --- .../com/minelittlepony/client/pony/Pony.java | 3 +- .../client/pony/PonyManager.java | 19 +++++++----- .../com/minelittlepony/pony/IPonyManager.java | 2 +- .../animation/BasicEasingInterpolator.java | 22 ++++++-------- .../util/chron/ChronicCache.java | 20 ------------- .../minelittlepony/util/chron/Touchable.java | 29 ------------------- .../util/chron/package-info.java | 4 --- 7 files changed, 23 insertions(+), 76 deletions(-) delete mode 100644 src/main/java/com/minelittlepony/util/chron/ChronicCache.java delete mode 100644 src/main/java/com/minelittlepony/util/chron/Touchable.java delete mode 100644 src/main/java/com/minelittlepony/util/chron/package-info.java diff --git a/src/main/java/com/minelittlepony/client/pony/Pony.java b/src/main/java/com/minelittlepony/client/pony/Pony.java index 0de16f14..832631af 100644 --- a/src/main/java/com/minelittlepony/client/pony/Pony.java +++ b/src/main/java/com/minelittlepony/client/pony/Pony.java @@ -11,7 +11,6 @@ import com.minelittlepony.pony.IPony; import com.minelittlepony.pony.IPonyData; import com.minelittlepony.pony.meta.Race; import com.minelittlepony.pony.meta.Size; -import com.minelittlepony.util.chron.Touchable; import net.minecraft.block.Material; import net.minecraft.client.MinecraftClient; @@ -40,7 +39,7 @@ import javax.annotation.Nullable; import javax.annotation.concurrent.Immutable; @Immutable -public class Pony extends Touchable implements IPony { +public class Pony implements IPony { private static final AtomicInteger ponyCount = new AtomicInteger(); diff --git a/src/main/java/com/minelittlepony/client/pony/PonyManager.java b/src/main/java/com/minelittlepony/client/pony/PonyManager.java index 06bdf3e8..aad01ff1 100644 --- a/src/main/java/com/minelittlepony/client/pony/PonyManager.java +++ b/src/main/java/com/minelittlepony/client/pony/PonyManager.java @@ -1,5 +1,8 @@ package com.minelittlepony.client.pony; +import com.google.common.cache.CacheBuilder; +import com.google.common.cache.CacheLoader; +import com.google.common.cache.LoadingCache; import com.google.common.collect.Lists; import com.google.gson.Gson; import com.google.gson.JsonParseException; @@ -10,7 +13,6 @@ import com.minelittlepony.pony.IPony; import com.minelittlepony.pony.IPonyManager; import com.minelittlepony.settings.PonyConfig; import com.minelittlepony.settings.PonyLevel; -import com.minelittlepony.util.chron.ChronicCache; import com.minelittlepony.util.math.MathUtil; import javax.annotation.Nullable; @@ -36,6 +38,7 @@ import java.util.Queue; import java.util.UUID; import java.util.concurrent.CompletableFuture; import java.util.concurrent.Executor; +import java.util.concurrent.TimeUnit; /** * The PonyManager is responsible for reading and recoding all the pony data associated with an entity of skin. @@ -52,7 +55,9 @@ public class PonyManager implements IPonyManager, ResourceReloadListener, ISkinC private final PonyConfig config; - private final ChronicCache poniesCache = new ChronicCache<>(); + private final LoadingCache poniesCache = CacheBuilder.newBuilder() + .expireAfterAccess(30, TimeUnit.SECONDS) + .build(CacheLoader.from(Pony::new)); public PonyManager(PonyConfig config) { this.config = config; @@ -60,7 +65,7 @@ public class PonyManager implements IPonyManager, ResourceReloadListener, ISkinC @Override public IPony getPony(Identifier resource) { - return poniesCache.retrieve(resource, Pony::new); + return poniesCache.getUnchecked(resource); } @Override @@ -135,8 +140,8 @@ public class PonyManager implements IPonyManager, ResourceReloadListener, ISkinC } @Override - public IPony removePony(Identifier resource) { - return poniesCache.remove(resource); + public void removePony(Identifier resource) { + poniesCache.invalidate(resource); } @Override @@ -155,7 +160,7 @@ public class PonyManager implements IPonyManager, ResourceReloadListener, ISkinC } public void reloadAll(ResourceManager resourceManager) { - poniesCache.clear(); + poniesCache.invalidateAll(); backgroundPonyList.clear(); List collectedPaths = new LinkedList<>(); @@ -252,7 +257,7 @@ public class PonyManager implements IPonyManager, ResourceReloadListener, ISkinC @Override public boolean onSkinCacheCleared() { MineLittlePony.logger.info("Flushed {} cached ponies.", poniesCache.size()); - poniesCache.clear(); + poniesCache.invalidateAll(); return true; } } diff --git a/src/main/java/com/minelittlepony/pony/IPonyManager.java b/src/main/java/com/minelittlepony/pony/IPonyManager.java index b52dfe60..ce5821bb 100644 --- a/src/main/java/com/minelittlepony/pony/IPonyManager.java +++ b/src/main/java/com/minelittlepony/pony/IPonyManager.java @@ -62,7 +62,7 @@ public interface IPonyManager { /** * De-registers a pony from the cache. */ - IPony removePony(Identifier resource); + void removePony(Identifier resource); public static Identifier getDefaultSkin(UUID uuid) { return isSlimSkin(uuid) ? ALEX : STEVE; diff --git a/src/main/java/com/minelittlepony/util/animation/BasicEasingInterpolator.java b/src/main/java/com/minelittlepony/util/animation/BasicEasingInterpolator.java index 48874279..9da3276f 100644 --- a/src/main/java/com/minelittlepony/util/animation/BasicEasingInterpolator.java +++ b/src/main/java/com/minelittlepony/util/animation/BasicEasingInterpolator.java @@ -1,29 +1,25 @@ package com.minelittlepony.util.animation; -import com.minelittlepony.util.chron.ChronicCache; -import com.minelittlepony.util.chron.Touchable; +import com.google.common.cache.CacheBuilder; +import com.google.common.cache.CacheLoader; +import com.google.common.cache.LoadingCache; import java.util.HashMap; import java.util.Map; import java.util.UUID; +import java.util.concurrent.TimeUnit; -public class BasicEasingInterpolator extends Touchable implements IInterpolator { +public class BasicEasingInterpolator implements IInterpolator { - private static ChronicCache instanceCache = new ChronicCache<>(); + private static LoadingCache instanceCache = CacheBuilder.newBuilder() + .expireAfterAccess(30, TimeUnit.SECONDS) + .build(CacheLoader.from(BasicEasingInterpolator::new)); /** * Gets or creates a new basic, linear interpolator for the provided id. */ public static IInterpolator getInstance(UUID id) { - return instanceCache.retrieve(id, BasicEasingInterpolator::new); - } - - public BasicEasingInterpolator() { - - } - - private BasicEasingInterpolator(UUID id) { - + return instanceCache.getUnchecked(id); } private final Map properties = new HashMap(); diff --git a/src/main/java/com/minelittlepony/util/chron/ChronicCache.java b/src/main/java/com/minelittlepony/util/chron/ChronicCache.java deleted file mode 100644 index 988465d6..00000000 --- a/src/main/java/com/minelittlepony/util/chron/ChronicCache.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.minelittlepony.util.chron; - -import java.util.HashMap; -import java.util.function.Function; - -/** - * Special version of a map that culls its own values. - */ -public class ChronicCache> extends HashMap { - private static final long serialVersionUID = 6454924015818181978L; - - public V retrieve(K key, Function mappingFunction) { - V result = computeIfAbsent(key, mappingFunction).touch(); - - entrySet().removeIf(entry -> entry.getValue().hasExpired()); - - return result; - } - -} diff --git a/src/main/java/com/minelittlepony/util/chron/Touchable.java b/src/main/java/com/minelittlepony/util/chron/Touchable.java deleted file mode 100644 index 9858b1d7..00000000 --- a/src/main/java/com/minelittlepony/util/chron/Touchable.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.minelittlepony.util.chron; - -/** - * DON'T TOUCH ME I'M SCAREED - * - * Basic touchable object that expires if not gently caressed for all of 30 seconds. - */ -public abstract class Touchable> { - - private long expirationPeriod; - - /** - * Returns whether this object is dead (expired). - * Expired Touchables are flushed from the ChronicCache on next access. - */ - public boolean hasExpired() { - return expirationPeriod <= System.currentTimeMillis(); - } - - /** - * Touches this object. - * Internally just updates the expiration date. - */ - @SuppressWarnings("unchecked") - public T touch() { - expirationPeriod = System.currentTimeMillis() + 30000; - return (T)this; - } -} diff --git a/src/main/java/com/minelittlepony/util/chron/package-info.java b/src/main/java/com/minelittlepony/util/chron/package-info.java deleted file mode 100644 index 24755cdc..00000000 --- a/src/main/java/com/minelittlepony/util/chron/package-info.java +++ /dev/null @@ -1,4 +0,0 @@ -@ParametersAreNonnullByDefault -package com.minelittlepony.util.chron; - -import javax.annotation.ParametersAreNonnullByDefault;