From e4e6753a022176a7c74b0e8f5945f0a02c0b033f Mon Sep 17 00:00:00 2001 From: s809 <43530948+s809@users.noreply.github.com> Date: Sun, 24 Sep 2023 14:24:31 +0500 Subject: [PATCH] Add gen task rate display --- .../GeneratedFullDataFileHandler.java | 37 ++++++++++++++++++- 1 file changed, 35 insertions(+), 2 deletions(-) diff --git a/core/src/main/java/com/seibel/distanthorizons/core/file/fullDatafile/GeneratedFullDataFileHandler.java b/core/src/main/java/com/seibel/distanthorizons/core/file/fullDatafile/GeneratedFullDataFileHandler.java index f4e5072e4..8360eb94f 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/file/fullDatafile/GeneratedFullDataFileHandler.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/file/fullDatafile/GeneratedFullDataFileHandler.java @@ -30,12 +30,14 @@ import com.seibel.distanthorizons.core.generation.tasks.WorldGenResult; import com.seibel.distanthorizons.core.level.DhLevel; import com.seibel.distanthorizons.core.level.IDhLevel; import com.seibel.distanthorizons.core.logging.DhLoggerBuilder; +import com.seibel.distanthorizons.core.logging.f3.F3Screen; import com.seibel.distanthorizons.core.pos.DhSectionPos; import com.seibel.distanthorizons.core.util.LodUtil; import org.apache.logging.log4j.Logger; import javax.annotation.Nullable; import java.lang.ref.WeakReference; +import java.text.DecimalFormat; import java.util.*; import java.util.concurrent.*; import java.util.concurrent.atomic.AtomicReference; @@ -50,12 +52,37 @@ public class GeneratedFullDataFileHandler extends FullDataFileHandler private final ArrayList onWorldGenTaskCompleteListeners = new ArrayList<>(); + private final ConcurrentSkipListSet taskCompletionTimes = new ConcurrentSkipListSet<>(); + private final F3Screen.DynamicMessage handlerF3Message; + // Use to hold onto incomplete data sources that are waiting for generation, so that they don't get GC'd before they are generated private final ConcurrentHashMap incompleteDataSources = new ConcurrentHashMap<>(); - public GeneratedFullDataFileHandler(IDhLevel level, AbstractSaveStructure saveStructure) { super(level, saveStructure); } - + public GeneratedFullDataFileHandler(IDhLevel level, AbstractSaveStructure saveStructure) { + super(level, saveStructure); + this.handlerF3Message = new F3Screen.DynamicMessage(() -> + { + // Keep only for last 30 seconds + taskCompletionTimes.removeIf(time -> time < System.currentTimeMillis() - 30000); + if (taskCompletionTimes.size() < 2) + return "Gen task completion time: No information yet"; + + double timePerCompletion = (double) (taskCompletionTimes.last() - taskCompletionTimes.first()) / taskCompletionTimes.size() / 1000; + if (timePerCompletion < 1) { + double completionRate = 1 / timePerCompletion; + return "Gen task completion rate: " + new DecimalFormat("#.00").format(completionRate) + " completions/sec"; + } else { + return "Gen task completion time: " + new DecimalFormat("#.00").format(timePerCompletion) + " seconds/completion"; + } + }); + } + @Override + public void close() + { + super.close(); + this.handlerF3Message.close(); + } //==================// // generation queue // @@ -256,6 +283,7 @@ public class GeneratedFullDataFileHandler extends FullDataFileHandler // generation completed, update the files and listener(s) this.flushAndSave(pos); //this.fireOnGenPosSuccessListeners(pos); + this.addTimestampToStatistics(); return; } else @@ -274,6 +302,11 @@ public class GeneratedFullDataFileHandler extends FullDataFileHandler genTask.releaseStrongReference(); } + private void addTimestampToStatistics() + { + taskCompletionTimes.add(System.currentTimeMillis()); + } + private void fireOnGenPosSuccessListeners(DhSectionPos pos) { if (true) return;