3D Cache to caff

This commit is contained in:
cyberpwn 2021-09-21 08:19:24 -04:00
parent 6b62ba1c5b
commit 7755b19abc
3 changed files with 32 additions and 16 deletions

View File

@ -451,8 +451,6 @@ public class Iris extends VolmitPlugin implements Listener {
J.a(ServerConfigurator::configure, 20); J.a(ServerConfigurator::configure, 20);
splash(); splash();
J.sr(() -> Iris.service(PreservationSVC.class).printCaches(), 20);
if (IrisSettings.get().getStudio().isAutoStartDefaultStudio()) { if (IrisSettings.get().getStudio().isAutoStartDefaultStudio()) {
Iris.info("Starting up auto Studio!"); Iris.info("Starting up auto Studio!");
try { try {

View File

@ -296,8 +296,8 @@ public interface ProceduralStream<T> extends ProceduralLayer, Interpolated<T> {
return new CachedStream2D<T>(engine, this, maxSize, weak); return new CachedStream2D<T>(engine, this, maxSize, weak);
} }
default ProceduralStream<T> cache3D(int maxSize) { default ProceduralStream<T> cache3D(Engine engine, int maxSize) {
return new CachedStream3D<T>(this, maxSize); return new CachedStream3D<T>(engine, this, maxSize);
} }
default <V> ProceduralStream<V> convert(Function<T, V> converter) { default <V> ProceduralStream<V> convert(Function<T, V> converter) {

View File

@ -18,23 +18,26 @@
package com.volmit.iris.util.stream.utility; 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.math.BlockPosition;
import com.volmit.iris.util.stream.BasicStream; import com.volmit.iris.util.stream.BasicStream;
import com.volmit.iris.util.stream.ProceduralStream; import com.volmit.iris.util.stream.ProceduralStream;
public class CachedStream3D<T> extends BasicStream<T> implements ProceduralStream<T> { public class CachedStream3D<T> extends BasicStream<T> implements ProceduralStream<T>, MeteredCache {
private final ProceduralStream<T> stream; private final ProceduralStream<T> stream;
private final ConcurrentLinkedHashMap<BlockPosition, T> cache; private final KCache<BlockPosition, T> cache;
private final Engine engine;
public CachedStream3D(ProceduralStream<T> stream, int size) { public CachedStream3D(Engine engine, ProceduralStream<T> stream, int size) {
super(); super();
this.stream = stream; this.stream = stream;
cache = new ConcurrentLinkedHashMap.Builder<BlockPosition, T>() this.engine = engine;
.initialCapacity(size) cache = new KCache<>((k) -> stream.get(k.getX(), k.getY(), k.getZ()), size);
.maximumWeightedCapacity(size) Iris.service(PreservationSVC.class).registerCache(this);
.concurrencyLevel(32)
.build();
} }
@Override @Override
@ -49,11 +52,26 @@ public class CachedStream3D<T> extends BasicStream<T> implements ProceduralStrea
@Override @Override
public T get(double x, double z) { 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 @Override
public T get(double x, double y, double z) { 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();
} }
} }