Show real pregen speed quicker
This commit is contained in:
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user