This commit is contained in:
Daniel Mills
2021-07-16 05:49:16 -04:00
parent 9c376183e0
commit 9896d6e6b2
6 changed files with 63 additions and 15 deletions

View File

@@ -24,9 +24,14 @@ import com.volmit.iris.engine.cache.Cache;
import com.volmit.iris.engine.stream.BasicStream;
import com.volmit.iris.engine.stream.ProceduralStream;
import java.util.concurrent.atomic.AtomicInteger;
public class CachedStream2D<T> extends BasicStream<T> implements ProceduralStream<T> {
private final ProceduralStream<T> stream;
private final ConcurrentLinkedHashMap<Long, T> cache;
public static final AtomicInteger cacheHits = new AtomicInteger();
public static final AtomicInteger cacheMisses = new AtomicInteger();
public static final AtomicInteger evictions = new AtomicInteger();
public CachedStream2D(ProceduralStream<T> stream, int size) {
super();
@@ -35,6 +40,7 @@ public class CachedStream2D<T> extends BasicStream<T> implements ProceduralStrea
.initialCapacity(size)
.maximumWeightedCapacity(size)
.concurrencyLevel(32)
.listener((k, v) -> evictions.incrementAndGet())
.build();
}
@@ -55,7 +61,16 @@ public class CachedStream2D<T> extends BasicStream<T> implements ProceduralStrea
return stream.get((int) x, (int) z);
}
return cache.compute(Cache.key((int) x, (int) z), (k, v) -> v != null ? v : stream.get((int) x, (int) z));
return cache.compute(Cache.key((int) x, (int) z), (k, v) -> {
if(v != null )
{
cacheHits.incrementAndGet();
return v;
}
cacheMisses.incrementAndGet();
return stream.get((int) x, (int) z);
});
}
@Override