From 7755b19abc5a4c05163b6b19556e96053e1ec039 Mon Sep 17 00:00:00 2001 From: cyberpwn Date: Tue, 21 Sep 2021 08:19:24 -0400 Subject: [PATCH] 3D Cache to caff --- src/main/java/com/volmit/iris/Iris.java | 4 +- .../iris/util/stream/ProceduralStream.java | 4 +- .../util/stream/utility/CachedStream3D.java | 40 ++++++++++++++----- 3 files changed, 32 insertions(+), 16 deletions(-) diff --git a/src/main/java/com/volmit/iris/Iris.java b/src/main/java/com/volmit/iris/Iris.java index aae34c227..78dfbf506 100644 --- a/src/main/java/com/volmit/iris/Iris.java +++ b/src/main/java/com/volmit/iris/Iris.java @@ -450,9 +450,7 @@ public class Iris extends VolmitPlugin implements Listener { J.s(this::setupPapi); J.a(ServerConfigurator::configure, 20); splash(); - - J.sr(() -> Iris.service(PreservationSVC.class).printCaches(), 20); - + if (IrisSettings.get().getStudio().isAutoStartDefaultStudio()) { Iris.info("Starting up auto Studio!"); try { diff --git a/src/main/java/com/volmit/iris/util/stream/ProceduralStream.java b/src/main/java/com/volmit/iris/util/stream/ProceduralStream.java index f39284770..e2de6093a 100644 --- a/src/main/java/com/volmit/iris/util/stream/ProceduralStream.java +++ b/src/main/java/com/volmit/iris/util/stream/ProceduralStream.java @@ -296,8 +296,8 @@ public interface ProceduralStream extends ProceduralLayer, Interpolated { return new CachedStream2D(engine, this, maxSize, weak); } - default ProceduralStream cache3D(int maxSize) { - return new CachedStream3D(this, maxSize); + default ProceduralStream cache3D(Engine engine, int maxSize) { + return new CachedStream3D(engine, this, maxSize); } default ProceduralStream convert(Function converter) { diff --git a/src/main/java/com/volmit/iris/util/stream/utility/CachedStream3D.java b/src/main/java/com/volmit/iris/util/stream/utility/CachedStream3D.java index cfa3c0bf3..97a3c171d 100644 --- a/src/main/java/com/volmit/iris/util/stream/utility/CachedStream3D.java +++ b/src/main/java/com/volmit/iris/util/stream/utility/CachedStream3D.java @@ -18,23 +18,26 @@ package com.volmit.iris.util.stream.utility; -import com.googlecode.concurrentlinkedhashmap.ConcurrentLinkedHashMap; +import com.volmit.iris.Iris; +import com.volmit.iris.core.service.PreservationSVC; +import com.volmit.iris.engine.framework.Engine; +import com.volmit.iris.engine.framework.MeteredCache; +import com.volmit.iris.util.data.KCache; import com.volmit.iris.util.math.BlockPosition; import com.volmit.iris.util.stream.BasicStream; import com.volmit.iris.util.stream.ProceduralStream; -public class CachedStream3D extends BasicStream implements ProceduralStream { +public class CachedStream3D extends BasicStream implements ProceduralStream, MeteredCache { private final ProceduralStream stream; - private final ConcurrentLinkedHashMap cache; + private final KCache cache; + private final Engine engine; - public CachedStream3D(ProceduralStream stream, int size) { + public CachedStream3D(Engine engine, ProceduralStream stream, int size) { super(); this.stream = stream; - cache = new ConcurrentLinkedHashMap.Builder() - .initialCapacity(size) - .maximumWeightedCapacity(size) - .concurrencyLevel(32) - .build(); + this.engine = engine; + cache = new KCache<>((k) -> stream.get(k.getX(), k.getY(), k.getZ()), size); + Iris.service(PreservationSVC.class).registerCache(this); } @Override @@ -49,11 +52,26 @@ public class CachedStream3D extends BasicStream implements ProceduralStrea @Override public T get(double x, double z) { - return cache.computeIfAbsent(new BlockPosition((int) x, -1, (int) z), (k) -> stream.get((int) x, (int) z)); + return cache.get(new BlockPosition((int) x, 0, (int) z)); } @Override public T get(double x, double y, double z) { - return cache.computeIfAbsent(new BlockPosition((int) x, (int) y, (int) z), (k) -> stream.get((int) x, (int) y, (int) z)); + return cache.get(new BlockPosition((int) x, (int) y, (int) z)); + } + + @Override + public long getSize() { + return cache.getSize(); + } + + @Override + public long getMaxSize() { + return cache.getMaxSize(); + } + + @Override + public boolean isClosed() { + return engine.isClosed(); } }