Multicore post

This commit is contained in:
Daniel Mills 2021-07-27 17:00:19 -04:00
parent 4a3ac17a2f
commit 3e11ff65db

View File

@ -25,6 +25,7 @@ import com.volmit.iris.engine.framework.EngineAssignedModifier;
import com.volmit.iris.engine.hunk.Hunk; import com.volmit.iris.engine.hunk.Hunk;
import com.volmit.iris.engine.object.IrisBiome; import com.volmit.iris.engine.object.IrisBiome;
import com.volmit.iris.engine.object.common.CaveResult; import com.volmit.iris.engine.object.common.CaveResult;
import com.volmit.iris.engine.parallel.BurstExecutor;
import com.volmit.iris.util.math.RNG; import com.volmit.iris.util.math.RNG;
import com.volmit.iris.util.scheduling.PrecisionStopwatch; import com.volmit.iris.util.scheduling.PrecisionStopwatch;
import org.bukkit.Material; import org.bukkit.Material;
@ -33,6 +34,8 @@ import org.bukkit.block.data.Levelled;
import org.bukkit.block.data.Waterlogged; import org.bukkit.block.data.Waterlogged;
import org.bukkit.block.data.type.Slab; import org.bukkit.block.data.type.Slab;
import java.util.concurrent.atomic.AtomicInteger;
public class IrisPostModifier extends EngineAssignedModifier<BlockData> { public class IrisPostModifier extends EngineAssignedModifier<BlockData> {
private static final BlockData AIR = B.get("CAVE_AIR"); private static final BlockData AIR = B.get("CAVE_AIR");
private static final BlockData WATER = B.get("WATER"); private static final BlockData WATER = B.get("WATER");
@ -46,12 +49,18 @@ public class IrisPostModifier extends EngineAssignedModifier<BlockData> {
@Override @Override
public void onModify(int x, int z, Hunk<BlockData> output) { public void onModify(int x, int z, Hunk<BlockData> output) {
PrecisionStopwatch p = PrecisionStopwatch.start(); PrecisionStopwatch p = PrecisionStopwatch.start();
int i, j; BurstExecutor e = getEngine().burst().burst(output.getWidth());
int i;
AtomicInteger j = new AtomicInteger();
for (i = 0; i < output.getWidth(); i++) { for (i = 0; i < output.getWidth(); i++) {
for (j = 0; j < output.getDepth(); j++) { int finalI = i;
post(i, j, output, i + x, j + z); e.queue(() -> {
} for (j.set(0); j.get() < output.getDepth(); j.getAndIncrement()) {
post(finalI, j.get(), output, finalI + x, j.get() + z);
}
});
} }
e.complete();
getEngine().getMetrics().getPost().put(p.getMilliseconds()); getEngine().getMetrics().getPost().put(p.getMilliseconds());
} }