forked from mirror/Folia
4a59238743
Very early build, network configuration switching is supported but not tested (note: changes need to be backported to Paper) Changes: - Supports per player mob caps - Adds entity tracker optimisations which are not in Paper (and will not be ported to Paper due to plugin conflicts) - No longer reverts paper distance map optimisations, as those are replaced by the NearbyPlayers class These changes should bring Folia in-line with Paper's optimisations at least (probably more given the entity tracker optimisations), still missing features like world loading / some commands
87 lines
4.7 KiB
Diff
87 lines
4.7 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Spottedleaf <Spottedleaf@users.noreply.github.com>
|
|
Date: Fri, 10 Mar 2023 00:16:26 -0800
|
|
Subject: [PATCH] Add chunk system throughput counters to /tps
|
|
|
|
|
|
diff --git a/src/main/java/io/papermc/paper/chunk/system/scheduling/ChunkFullTask.java b/src/main/java/io/papermc/paper/chunk/system/scheduling/ChunkFullTask.java
|
|
index 679ed4d53269e1113035b462cf74ab16a231e22e..8a48238fac0949cfddcdd9ccf179d16befe9c4d4 100644
|
|
--- a/src/main/java/io/papermc/paper/chunk/system/scheduling/ChunkFullTask.java
|
|
+++ b/src/main/java/io/papermc/paper/chunk/system/scheduling/ChunkFullTask.java
|
|
@@ -22,6 +22,9 @@ public final class ChunkFullTask extends ChunkProgressionTask implements Runnabl
|
|
protected final ChunkAccess fromChunk;
|
|
protected final PrioritisedExecutor.PrioritisedTask convertToFullTask;
|
|
|
|
+ public static final io.papermc.paper.util.IntervalledCounter chunkLoads = new io.papermc.paper.util.IntervalledCounter(java.util.concurrent.TimeUnit.SECONDS.toNanos(15L));
|
|
+ public static final io.papermc.paper.util.IntervalledCounter chunkGenerates = new io.papermc.paper.util.IntervalledCounter(java.util.concurrent.TimeUnit.SECONDS.toNanos(15L));
|
|
+
|
|
public ChunkFullTask(final ChunkTaskScheduler scheduler, final ServerLevel world, final int chunkX, final int chunkZ,
|
|
final NewChunkHolder chunkHolder, final ChunkAccess fromChunk, final PrioritisedExecutor.Priority priority) {
|
|
super(scheduler, world, chunkX, chunkZ);
|
|
@@ -35,6 +38,20 @@ public final class ChunkFullTask extends ChunkProgressionTask implements Runnabl
|
|
return ChunkStatus.FULL;
|
|
}
|
|
|
|
+ public static double genRate(final long time) {
|
|
+ synchronized (chunkGenerates) {
|
|
+ chunkGenerates.updateCurrentTime(time);
|
|
+ return chunkGenerates.getRate();
|
|
+ }
|
|
+ }
|
|
+
|
|
+ public static double loadRate(final long time) {
|
|
+ synchronized (chunkLoads) {
|
|
+ chunkLoads.updateCurrentTime(time);
|
|
+ return chunkLoads.getRate();
|
|
+ }
|
|
+ }
|
|
+
|
|
@Override
|
|
public void run() {
|
|
// See Vanilla protoChunkToFullChunk for what this function should be doing
|
|
@@ -49,6 +66,17 @@ public final class ChunkFullTask extends ChunkProgressionTask implements Runnabl
|
|
this.world.getPoiManager().checkConsistency(this.fromChunk);
|
|
}
|
|
|
|
+ final long time = System.nanoTime();
|
|
+ if (this.fromChunk instanceof ImposterProtoChunk wrappedFull) {
|
|
+ synchronized (chunkLoads) {
|
|
+ chunkLoads.updateAndAdd(1L, time);
|
|
+ }
|
|
+ } else {
|
|
+ synchronized (chunkGenerates) {
|
|
+ chunkGenerates.updateAndAdd(1L, time);
|
|
+ }
|
|
+ }
|
|
+
|
|
if (this.fromChunk instanceof ImposterProtoChunk wrappedFull) {
|
|
chunk = wrappedFull.getWrapped();
|
|
} else {
|
|
diff --git a/src/main/java/io/papermc/paper/threadedregions/commands/CommandServerHealth.java b/src/main/java/io/papermc/paper/threadedregions/commands/CommandServerHealth.java
|
|
index 3bcb1dc98c61e025874cc9e008faa722581a530c..0b48f45760829f1f4813b5f0f23e920dca7b1c45 100644
|
|
--- a/src/main/java/io/papermc/paper/threadedregions/commands/CommandServerHealth.java
|
|
+++ b/src/main/java/io/papermc/paper/threadedregions/commands/CommandServerHealth.java
|
|
@@ -170,6 +170,9 @@ public final class CommandServerHealth extends Command {
|
|
totalUtil += (report == null ? 0.0 : report.utilisation());
|
|
}
|
|
|
|
+ final double genRate = io.papermc.paper.chunk.system.scheduling.ChunkFullTask.genRate(currTime);
|
|
+ final double loadRate = io.papermc.paper.chunk.system.scheduling.ChunkFullTask.loadRate(currTime);
|
|
+
|
|
totalUtil += globalTickReport.utilisation();
|
|
|
|
tpsByRegion.sort(null);
|
|
@@ -284,6 +287,12 @@ public final class CommandServerHealth extends Command {
|
|
.append(Component.text(ONE_DECIMAL_PLACES.get().format(maxThreadCount * 100.0), INFORMATION))
|
|
.append(Component.text("%\n", PRIMARY))
|
|
|
|
+ .append(Component.text(" - ", LIST, TextDecoration.BOLD))
|
|
+ .append(Component.text("Load rate: ", PRIMARY))
|
|
+ .append(Component.text(TWO_DECIMAL_PLACES.get().format(loadRate) + ", ", INFORMATION))
|
|
+ .append(Component.text("Gen rate: ", PRIMARY))
|
|
+ .append(Component.text(TWO_DECIMAL_PLACES.get().format(genRate) + "\n", INFORMATION))
|
|
+
|
|
.append(Component.text(" - ", LIST, TextDecoration.BOLD))
|
|
.append(Component.text("Lowest Region TPS: ", PRIMARY))
|
|
.append(Component.text(TWO_DECIMAL_PLACES.get().format(minTps) + "\n", CommandUtil.getColourForTPS(minTps)))
|