mirror of
https://github.com/PaperMC/Folia.git
synced 2025-01-08 19:37:54 +01:00
e1ad1b1d91
Everyone had access to /tps for the private tests, but we cannot trust everyone to use it responsibly for the public test (i.e revealing coordinates of all logged in players).
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 300700477ee34bc22b31315825c0e40f61070cd5..0b78d1eb90500e0123b7281d722805dc65d551d0 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 b9e0568fb08e15444e4cfac09749fce7a93db825..84a2525115b4fc8d2e3c41e96b6351d446b05e33 100644
|
|
--- a/src/main/java/io/papermc/paper/threadedregions/commands/CommandServerHealth.java
|
|
+++ b/src/main/java/io/papermc/paper/threadedregions/commands/CommandServerHealth.java
|
|
@@ -148,6 +148,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);
|
|
@@ -255,6 +258,12 @@ public final class CommandServerHealth extends Command {
|
|
.append(Component.text(ONE_DECIMAL_PLACES.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.format(loadRate) + ", ", INFORMATION))
|
|
+ .append(Component.text("Gen rate: ", PRIMARY))
|
|
+ .append(Component.text(TWO_DECIMAL_PLACES.format(genRate) + "\n", INFORMATION))
|
|
+
|
|
.append(Component.text(" - ", LIST, TextDecoration.BOLD))
|
|
.append(Component.text("Lowest Region TPS: ", PRIMARY))
|
|
.append(Component.text(TWO_DECIMAL_PLACES.format(minTps) + "\n", CommandUtil.getColourForTPS(minTps)))
|