Performance Improvements

This commit is contained in:
Daniel Mills 2021-07-29 04:24:28 -04:00
parent 2f8fe43ea3
commit dc851d856d
6 changed files with 12 additions and 61 deletions

View File

@ -167,24 +167,6 @@ public class IrisEngine extends BlockPopulator implements Engine {
try {
PrecisionStopwatch p = PrecisionStopwatch.start();
Hunk<BlockData> blocks = vblocks.listen((xx, y, zz, t) -> catchBlockUpdates(x + xx, y + getMinHeight(), z + zz, t));
PrecisionStopwatch px = PrecisionStopwatch.start();
if (multicore) {
BurstExecutor b = burst().burst(16);
for (int i = 0; i < vblocks.getWidth(); i++) {
int finalI = i;
b.queue(() -> {
for (int j = 0; j < vblocks.getDepth(); j++) {
getFramework().getComplex().getTrueBiomeStream().get(x + finalI, z + j);
getFramework().getComplex().getTrueHeightStream().get(x + finalI, z + j);
}
});
}
b.complete();
}
getMetrics().getPrecache().put(px.getMilliseconds());
switch (getDimension().getTerrainMode()) {
case NORMAL -> {

View File

@ -99,7 +99,7 @@ public class EngineCompositeGenerator extends ChunkGenerator implements IrisAcce
this.production = production;
this.dimensionQuery = query;
initialized = new AtomicBoolean(false);
art = J.ar(this::tick, 100);
art = J.ar(this::tick, 20);
populators = new KList<BlockPopulator>().qadd(new BlockPopulator() {
@Override
public void populate(@NotNull World world, @NotNull Random random, @NotNull Chunk chunk) {

View File

@ -28,7 +28,6 @@ public class EngineMetrics {
private final AtomicRollingSequence updates;
private final AtomicRollingSequence terrain;
private final AtomicRollingSequence biome;
private final AtomicRollingSequence precache;
private final AtomicRollingSequence parallax;
private final AtomicRollingSequence parallaxInsert;
private final AtomicRollingSequence post;
@ -38,7 +37,6 @@ public class EngineMetrics {
private final AtomicRollingSequence deposit;
public EngineMetrics(int mem) {
this.precache = new AtomicRollingSequence(mem);
this.total = new AtomicRollingSequence(mem);
this.terrain = new AtomicRollingSequence(mem);
this.biome = new AtomicRollingSequence(mem);
@ -55,7 +53,6 @@ public class EngineMetrics {
public KMap<String, Double> pull() {
KMap<String, Double> v = new KMap<>();
v.put("total", total.getAverage());
v.put("precache", precache.getAverage());
v.put("terrain", terrain.getAverage());
v.put("biome", biome.getAverage());
v.put("parallax", parallax.getAverage());

View File

@ -42,15 +42,15 @@ public class PlannedStructure {
private IrisJigsawStructure structure;
private IrisPosition position;
private IrisDataManager data;
private RNG rng;
private boolean verbose;
private boolean terminating;
private static transient ConcurrentLinkedHashMap<String, IrisObject> objectRotationCache
= new ConcurrentLinkedHashMap.Builder<String, IrisObject>()
.initialCapacity(64)
.maximumWeightedCapacity(1024)
.concurrencyLevel(32)
.build();
private RNG rng;
private boolean verbose;
private boolean terminating;
public PlannedStructure(IrisJigsawStructure structure, IrisPosition position, RNG rng) {
terminating = false;
@ -286,17 +286,9 @@ public class PlannedStructure {
IrisPosition shift = test.getWorldPosition(testConnector);
test.setPosition(desiredPosition.sub(shift));
KList<PlannedPiece> collision = collidesWith(test);
if (pieceConnector.isInnerConnector() && collision.isNotEmpty()) {
for (PlannedPiece i : collision) {
if (i.equals(piece)) {
continue;
}
return false;
}
} else if (collision.isNotEmpty()) {
if(collidesWith(test, piece))
{
return false;
}
@ -359,17 +351,6 @@ public class PlannedStructure {
return v;
}
public KList<PlannedPiece> collidesWith(PlannedPiece piece) {
KList<PlannedPiece> v = new KList<>();
for (PlannedPiece i : pieces) {
if (i.collidesWith(piece)) {
v.add(i);
}
}
return v;
}
public boolean collidesWith(PlannedPiece piece, PlannedPiece ignore) {
for (PlannedPiece i : pieces) {
if (i.equals(ignore)) {

View File

@ -51,19 +51,11 @@ public class IrisPostModifier extends EngineAssignedModifier<BlockData> {
PrecisionStopwatch p = PrecisionStopwatch.start();
int i;
AtomicInteger j = new AtomicInteger();
if (false) { // TODO FIX DESYNCS
BurstExecutor e = getEngine().burst().burst(output.getWidth());
for (i = 0; i < output.getWidth(); i++) {
int finalI = i;
e.queue(() -> {
for (j.set(0); j.get() < output.getDepth(); j.getAndIncrement()) {
post(finalI, j.get(), output, finalI + x, j.get() + z);
}
});
}
e.complete();
} else {
for (i = 0; i < output.getWidth(); i++) {
for (j.set(0); j.get() < output.getDepth(); j.getAndIncrement()) {
post(i, j.get(), output, i + x, j.get() + z);
}
}
getEngine().getMetrics().getPost().put(p.getMilliseconds());
@ -71,7 +63,6 @@ public class IrisPostModifier extends EngineAssignedModifier<BlockData> {
@SuppressWarnings("SynchronizationOnLocalVariableOrMethodParameter")
private void post(int currentPostX, int currentPostZ, Hunk<BlockData> currentData, int x, int z) {
int h = getFramework().getEngineParallax().trueHeight(x, z);
int ha = getFramework().getEngineParallax().trueHeight(x + 1, z);
int hb = getFramework().getEngineParallax().trueHeight(x, z + 1);

View File

@ -71,10 +71,10 @@ public class IrisObject extends IrisRegistrant {
private transient BlockVector center;
private transient volatile boolean smartBored = false;
private transient IrisLock lock = new IrisLock("Preloadcache");
private transient AtomicCache<AxisAlignedBB> aabb;
private transient AtomicCache<AxisAlignedBB> aabb = new AtomicCache<>();
public AxisAlignedBB getAABB() {
return getAABBFor(new BlockVector(w, h, d));
return aabb.aquire(() -> getAABBFor(new BlockVector(w, h, d)));
}
public static BlockVector getCenterForSize(BlockVector size) {