Fix paper gen & spigot gen & shutdown issue

This commit is contained in:
Daniel Mills 2021-01-03 09:43:58 -05:00
parent 78eebc255e
commit 3073d3aa9d

View File

@ -1,5 +1,6 @@
package com.volmit.iris.pregen; package com.volmit.iris.pregen;
import com.sun.javafx.scene.control.skin.TableHeaderRow;
import com.volmit.iris.Iris; import com.volmit.iris.Iris;
import com.volmit.iris.IrisSettings; import com.volmit.iris.IrisSettings;
import com.volmit.iris.scaffold.IrisWorlds; import com.volmit.iris.scaffold.IrisWorlds;
@ -66,6 +67,7 @@ public class Pregenerator implements Listener
private final AtomicInteger vcax; private final AtomicInteger vcax;
private final AtomicInteger vcaz; private final AtomicInteger vcaz;
private final long elapsed; private final long elapsed;
private final ChronoLatch latch;
public Pregenerator(World world, int blockSize, Runnable onComplete) public Pregenerator(World world, int blockSize, Runnable onComplete)
{ {
@ -77,6 +79,7 @@ public class Pregenerator implements Listener
{ {
instance(); instance();
elapsed = M.ms(); elapsed = M.ms();
latch = new ChronoLatch(5000);
memoryMetric = new AtomicReference<>("..."); memoryMetric = new AtomicReference<>("...");
method = new AtomicReference<>("STARTUP"); method = new AtomicReference<>("STARTUP");
memory = new AtomicLong(0); memory = new AtomicLong(0);
@ -161,7 +164,8 @@ public class Pregenerator implements Listener
directWriter.flush(); directWriter.flush();
flushWorld(); flushWorld();
onComplete.forEach(Runnable::run); onComplete.forEach(Runnable::run);
running.set(false);
active.set(false);
if(gui != null) if(gui != null)
{ {
gui.close(); gui.close();
@ -178,6 +182,7 @@ public class Pregenerator implements Listener
perSecond.put((int) (up / (dur / 1000D))); perSecond.put((int) (up / (dur / 1000D)));
p.reset(); p.reset();
p.begin(); p.begin();
updateProgress();
generatedLast.set(m); generatedLast.set(m);
J.sleep(100); J.sleep(100);
long lmem = memory.get(); long lmem = memory.get();
@ -257,6 +262,17 @@ public class Pregenerator implements Listener
return false; return false;
} }
public void updateProgress()
{
if(!latch.flip())
{
return;
}
String[] v = getProgress();
Iris.info("[Pregen]: " + v[0] + " " + v[1] + " " + v[2] + " " + v[3]);
}
private void generateDeferedMCARegion(int x, int z, MultiBurst burst, Consumer3<Integer, Integer, Consumer2<Integer, Integer>> mcaIteration) { private void generateDeferedMCARegion(int x, int z, MultiBurst burst, Consumer3<Integer, Integer, Consumer2<Integer, Integer>> mcaIteration) {
BurstExecutor e = burst.burst(1024); BurstExecutor e = burst.burst(1024);
int mcaox = x << 5; int mcaox = x << 5;
@ -265,10 +281,9 @@ public class Pregenerator implements Listener
{ {
method.set("PaperAsync (Slow)"); method.set("PaperAsync (Slow)");
mcaIteration.accept(mcaox, mcaoz, (ii, jj) -> { mcaIteration.accept(mcaox, mcaoz, (ii, jj) -> {
draw(ii, jj, COLOR_MCA_GENERATE_SLOW); e.queue(() -> {
CompletableFuture<Chunk> cc = PaperLib.getChunkAtAsync(world, ii, jj); CompletableFuture<Chunk> cc = PaperLib.getChunkAtAsync(world, ii, jj);
draw(ii, jj, COLOR_MCA_GENERATE_SLOW_ASYNC); draw(ii, jj, COLOR_MCA_GENERATE_SLOW_ASYNC);
e.queue(() -> {
cc.join(); cc.join();
draw(ii, jj, COLOR_MCA_GENERATED); draw(ii, jj, COLOR_MCA_GENERATED);
generated.getAndIncrement(); generated.getAndIncrement();
@ -283,9 +298,10 @@ public class Pregenerator implements Listener
{ {
AtomicInteger m = new AtomicInteger(); AtomicInteger m = new AtomicInteger();
method.set("Spigot (Very Slow)"); method.set("Spigot (Very Slow)");
KList<Runnable> q = new KList<>();
mcaIteration.accept(mcaox, mcaoz, (ii, jj) -> { mcaIteration.accept(mcaox, mcaoz, (ii, jj) -> {
q.add(() -> {
draw(ii, jj, COLOR_MCA_GENERATE_SLOW); draw(ii, jj, COLOR_MCA_GENERATE_SLOW);
J.s(() -> {
world.getChunkAt(ii, jj).load(true); world.getChunkAt(ii, jj).load(true);
draw(ii, jj, COLOR_MCA_GENERATED); draw(ii, jj, COLOR_MCA_GENERATED);
m.getAndIncrement(); m.getAndIncrement();
@ -294,6 +310,32 @@ public class Pregenerator implements Listener
vcaz.set(jj); vcaz.set(jj);
}); });
}); });
ChronoLatch tick = new ChronoLatch(1000);
new SR(0) {
@Override
public void run() {
if(tick.flip())
{
return;
}
if(q.isEmpty())
{
cancel();
return;
}
try
{
q.pop().run();
}
catch(Throwable e)
{
}
}
};
while(m.get() < 1024) while(m.get() < 1024)
{ {