From 8b7292065293a7e4d0820e5485e41d0daec56a13 Mon Sep 17 00:00:00 2001 From: s809 <43530948+s809@users.noreply.github.com> Date: Fri, 13 Mar 2026 00:00:42 +0500 Subject: [PATCH] Show real pregen speed quicker --- .../core/generation/PregenManager.java | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/core/src/main/java/com/seibel/distanthorizons/core/generation/PregenManager.java b/core/src/main/java/com/seibel/distanthorizons/core/generation/PregenManager.java index ae19f4c80..bfb36e6f1 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/generation/PregenManager.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/generation/PregenManager.java @@ -9,7 +9,6 @@ import com.seibel.distanthorizons.core.dependencyInjection.SingletonInjector; import com.seibel.distanthorizons.core.file.fullDatafile.GeneratedFullDataSourceProvider; import com.seibel.distanthorizons.core.generation.tasks.DataSourceRetrievalResult; import com.seibel.distanthorizons.core.logging.DhLoggerBuilder; -import com.seibel.distanthorizons.core.generation.tasks.ERetrievalResultState; import com.seibel.distanthorizons.core.pos.DhSectionPos; import com.seibel.distanthorizons.core.pos.blockPos.DhBlockPos2D; import com.seibel.distanthorizons.core.util.FormatUtil; @@ -93,7 +92,8 @@ public class PregenManager private final AtomicInteger nextSectionSpiralIndex = new AtomicInteger(0); private final AtomicLong lastTaskFinishTime = new AtomicLong(System.currentTimeMillis()); - private final RollingAverage averageTaskCompletionIntervalMs = new RollingAverage(1000); + private RollingAverage averageTaskCompletionIntervalMs = new RollingAverage(1000); + private final RollingAverage averageTaskCompletionIntervalMsShort = new RollingAverage(50); private final AtomicLong lastLogTime = new AtomicLong(); @@ -112,6 +112,7 @@ public class PregenManager long timeSincePreviousTaskFinish = System.currentTimeMillis() - this.lastTaskFinishTime.getAndSet(System.currentTimeMillis()); this.averageTaskCompletionIntervalMs.add(timeSincePreviousTaskFinish); + this.averageTaskCompletionIntervalMsShort.add(timeSincePreviousTaskFinish); PregenState.this.fillPendingQueue(); }) @@ -181,7 +182,14 @@ public class PregenManager double chunksToGenerate = Math.ceil(Math.sqrt(this.sectionsToGenerate) / 2 * 4 * 10) / 10; // ceil to nearest 0.1 int chunkRatePerSecond = (int) (1000 / this.averageTaskCompletionIntervalMs.getAverage() * 4 * 4); double etaMs = this.averageTaskCompletionIntervalMs.getAverage() * (this.sectionsToGenerate - this.nextSectionSpiralIndex.get()); - + + // Reset long rolling average if short average diverged too much (<0.5 / >2.0) + double averageRatio = this.averageTaskCompletionIntervalMsShort.getAverage() / this.averageTaskCompletionIntervalMs.getAverage(); + if (averageRatio < 0.5 || averageRatio > 2.0) + { + this.averageTaskCompletionIntervalMs = new RollingAverage(1000); + } + return MessageFormat.format("Generated radius: {0,number,#.###} / {1,number,#.#} chunks ({2} cps, {3,number,#.###%}), ETA: {4}", this.generatedRadius.getValue(), chunksToGenerate,