From dc851d856d655449e608c0f0a0c5055aa56f543d Mon Sep 17 00:00:00 2001 From: Daniel Mills Date: Thu, 29 Jul 2021 04:24:28 -0400 Subject: [PATCH] Performance Improvements --- .../com/volmit/iris/engine/IrisEngine.java | 18 ------------ .../framework/EngineCompositeGenerator.java | 2 +- .../iris/engine/framework/EngineMetrics.java | 3 -- .../iris/engine/jigsaw/PlannedStructure.java | 29 ++++--------------- .../engine/modifier/IrisPostModifier.java | 17 +++-------- .../volmit/iris/engine/object/IrisObject.java | 4 +-- 6 files changed, 12 insertions(+), 61 deletions(-) diff --git a/src/main/java/com/volmit/iris/engine/IrisEngine.java b/src/main/java/com/volmit/iris/engine/IrisEngine.java index d68abcd76..19ea0b734 100644 --- a/src/main/java/com/volmit/iris/engine/IrisEngine.java +++ b/src/main/java/com/volmit/iris/engine/IrisEngine.java @@ -167,24 +167,6 @@ public class IrisEngine extends BlockPopulator implements Engine { try { PrecisionStopwatch p = PrecisionStopwatch.start(); Hunk 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 -> { diff --git a/src/main/java/com/volmit/iris/engine/framework/EngineCompositeGenerator.java b/src/main/java/com/volmit/iris/engine/framework/EngineCompositeGenerator.java index 7c6074169..27d3e72c2 100644 --- a/src/main/java/com/volmit/iris/engine/framework/EngineCompositeGenerator.java +++ b/src/main/java/com/volmit/iris/engine/framework/EngineCompositeGenerator.java @@ -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().qadd(new BlockPopulator() { @Override public void populate(@NotNull World world, @NotNull Random random, @NotNull Chunk chunk) { diff --git a/src/main/java/com/volmit/iris/engine/framework/EngineMetrics.java b/src/main/java/com/volmit/iris/engine/framework/EngineMetrics.java index f777e41aa..3af80876c 100644 --- a/src/main/java/com/volmit/iris/engine/framework/EngineMetrics.java +++ b/src/main/java/com/volmit/iris/engine/framework/EngineMetrics.java @@ -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 pull() { KMap 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()); diff --git a/src/main/java/com/volmit/iris/engine/jigsaw/PlannedStructure.java b/src/main/java/com/volmit/iris/engine/jigsaw/PlannedStructure.java index 49fc1a27f..5d376edee 100644 --- a/src/main/java/com/volmit/iris/engine/jigsaw/PlannedStructure.java +++ b/src/main/java/com/volmit/iris/engine/jigsaw/PlannedStructure.java @@ -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 objectRotationCache = new ConcurrentLinkedHashMap.Builder() .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 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 collidesWith(PlannedPiece piece) { - KList 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)) { diff --git a/src/main/java/com/volmit/iris/engine/modifier/IrisPostModifier.java b/src/main/java/com/volmit/iris/engine/modifier/IrisPostModifier.java index df7cd62e4..877b6e431 100644 --- a/src/main/java/com/volmit/iris/engine/modifier/IrisPostModifier.java +++ b/src/main/java/com/volmit/iris/engine/modifier/IrisPostModifier.java @@ -51,19 +51,11 @@ public class IrisPostModifier extends EngineAssignedModifier { 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 { @SuppressWarnings("SynchronizationOnLocalVariableOrMethodParameter") private void post(int currentPostX, int currentPostZ, Hunk 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); diff --git a/src/main/java/com/volmit/iris/engine/object/IrisObject.java b/src/main/java/com/volmit/iris/engine/object/IrisObject.java index 439b9c12a..d1b5f7d5d 100644 --- a/src/main/java/com/volmit/iris/engine/object/IrisObject.java +++ b/src/main/java/com/volmit/iris/engine/object/IrisObject.java @@ -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 aabb; + private transient AtomicCache 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) {