Mirror von
https://github.com/PaperMC/Paper.git
synchronisiert 2024-12-15 19:10:09 +01:00
Add tick times API and /mspt command (#3102)
Dieser Commit ist enthalten in:
Ursprung
11de41c777
Commit
588b62e47b
65
Spigot-API-Patches/0193-Add-tick-times-API.patch
Normale Datei
65
Spigot-API-Patches/0193-Add-tick-times-API.patch
Normale Datei
@ -0,0 +1,65 @@
|
|||||||
|
From 1fe29f877ba04e8bed08b47c185ddb9244705507 Mon Sep 17 00:00:00 2001
|
||||||
|
From: William Blake Galbreath <Blake.Galbreath@GMail.com>
|
||||||
|
Date: Sun, 5 Apr 2020 22:22:58 -0500
|
||||||
|
Subject: [PATCH] Add tick times API
|
||||||
|
|
||||||
|
|
||||||
|
diff --git a/src/main/java/org/bukkit/Bukkit.java b/src/main/java/org/bukkit/Bukkit.java
|
||||||
|
index b9973406..c3c2d9c6 100644
|
||||||
|
--- a/src/main/java/org/bukkit/Bukkit.java
|
||||||
|
+++ b/src/main/java/org/bukkit/Bukkit.java
|
||||||
|
@@ -1412,6 +1412,25 @@ public final class Bukkit {
|
||||||
|
public static double[] getTPS() {
|
||||||
|
return server.getTPS();
|
||||||
|
}
|
||||||
|
+
|
||||||
|
+ /**
|
||||||
|
+ * Get a sample of the servers last tick times (in nanos)
|
||||||
|
+ *
|
||||||
|
+ * @return A sample of the servers last tick times (in nanos)
|
||||||
|
+ */
|
||||||
|
+ @NotNull
|
||||||
|
+ public static long[] getTickTimes() {
|
||||||
|
+ return server.getTickTimes();
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ /**
|
||||||
|
+ * Get the average tick time (in millis)
|
||||||
|
+ *
|
||||||
|
+ * @return Average tick time (in millis)
|
||||||
|
+ */
|
||||||
|
+ public static double getAverageTickTime() {
|
||||||
|
+ return server == null ? 0D : server.getAverageTickTime();
|
||||||
|
+ }
|
||||||
|
// Paper end
|
||||||
|
|
||||||
|
/**
|
||||||
|
diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java
|
||||||
|
index 80f9abdc..bfa83c9b 100644
|
||||||
|
--- a/src/main/java/org/bukkit/Server.java
|
||||||
|
+++ b/src/main/java/org/bukkit/Server.java
|
||||||
|
@@ -1188,6 +1188,21 @@ public interface Server extends PluginMessageRecipient {
|
||||||
|
*/
|
||||||
|
@NotNull
|
||||||
|
public double[] getTPS();
|
||||||
|
+
|
||||||
|
+ /**
|
||||||
|
+ * Get a sample of the servers last tick times (in nanos)
|
||||||
|
+ *
|
||||||
|
+ * @return A sample of the servers last tick times (in nanos)
|
||||||
|
+ */
|
||||||
|
+ @NotNull
|
||||||
|
+ long[] getTickTimes();
|
||||||
|
+
|
||||||
|
+ /**
|
||||||
|
+ * Get the average tick time (in millis)
|
||||||
|
+ *
|
||||||
|
+ * @return Average tick time (in millis)
|
||||||
|
+ */
|
||||||
|
+ double getAverageTickTime();
|
||||||
|
// Paper end
|
||||||
|
|
||||||
|
// Paper start
|
||||||
|
--
|
||||||
|
2.24.0
|
||||||
|
|
172
Spigot-Server-Patches/0460-Add-tick-times-API-and-mspt-command.patch
Normale Datei
172
Spigot-Server-Patches/0460-Add-tick-times-API-and-mspt-command.patch
Normale Datei
@ -0,0 +1,172 @@
|
|||||||
|
From b27e5e76fb9039e25e502f831badc083d73afbf7 Mon Sep 17 00:00:00 2001
|
||||||
|
From: William Blake Galbreath <Blake.Galbreath@GMail.com>
|
||||||
|
Date: Sun, 5 Apr 2020 22:23:14 -0500
|
||||||
|
Subject: [PATCH] Add tick times API and /mspt command
|
||||||
|
|
||||||
|
|
||||||
|
diff --git a/src/main/java/com/destroystokyo/paper/MSPTCommand.java b/src/main/java/com/destroystokyo/paper/MSPTCommand.java
|
||||||
|
new file mode 100644
|
||||||
|
index 000000000..d0211d4f3
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/src/main/java/com/destroystokyo/paper/MSPTCommand.java
|
||||||
|
@@ -0,0 +1,64 @@
|
||||||
|
+package com.destroystokyo.paper;
|
||||||
|
+
|
||||||
|
+import net.minecraft.server.MinecraftServer;
|
||||||
|
+import org.bukkit.ChatColor;
|
||||||
|
+import org.bukkit.Location;
|
||||||
|
+import org.bukkit.command.Command;
|
||||||
|
+import org.bukkit.command.CommandSender;
|
||||||
|
+
|
||||||
|
+import java.text.DecimalFormat;
|
||||||
|
+import java.util.ArrayList;
|
||||||
|
+import java.util.Arrays;
|
||||||
|
+import java.util.Collections;
|
||||||
|
+import java.util.List;
|
||||||
|
+
|
||||||
|
+public class MSPTCommand extends Command {
|
||||||
|
+ private static final DecimalFormat DF = new DecimalFormat("########0.0");
|
||||||
|
+
|
||||||
|
+ public MSPTCommand(String name) {
|
||||||
|
+ super(name);
|
||||||
|
+ this.description = "View server tick times";
|
||||||
|
+ this.usageMessage = "/mspt";
|
||||||
|
+ this.setPermission("bukkit.command.mspt");
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ @Override
|
||||||
|
+ public List<String> tabComplete(CommandSender sender, String alias, String[] args, Location location) throws IllegalArgumentException {
|
||||||
|
+ return Collections.emptyList();
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ @Override
|
||||||
|
+ public boolean execute(CommandSender sender, String commandLabel, String[] args) {
|
||||||
|
+ if (!testPermission(sender)) return true;
|
||||||
|
+
|
||||||
|
+ MinecraftServer server = MinecraftServer.getServer();
|
||||||
|
+
|
||||||
|
+ List<String> times = new ArrayList<>();
|
||||||
|
+ times.addAll(eval(server.tickTimes5s.getTimes()));
|
||||||
|
+ times.addAll(eval(server.tickTimes10s.getTimes()));
|
||||||
|
+ times.addAll(eval(server.tickTimes60s.getTimes()));
|
||||||
|
+
|
||||||
|
+ sender.sendMessage("§6Server tick times §e(§7avg§e/§7min§e/§7max§e)§6 from last 5s§7,§6 10s§7,§6 1m§e:");
|
||||||
|
+ sender.sendMessage(String.format("§6◴ %s§7/%s§7/%s§e, %s§7/%s§7/%s§e, %s§7/%s§7/%s", times.toArray()));
|
||||||
|
+ return true;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ private static List<String> eval(long[] times) {
|
||||||
|
+ long min = Integer.MAX_VALUE;
|
||||||
|
+ long max = 0L;
|
||||||
|
+ long total = 0L;
|
||||||
|
+ for (long value : times) {
|
||||||
|
+ if (value > 0L && value < min) min = value;
|
||||||
|
+ if (value > max) max = value;
|
||||||
|
+ total += value;
|
||||||
|
+ }
|
||||||
|
+ double avgD = ((double) total / (double) times.length) * 1.0E-6D;
|
||||||
|
+ double minD = ((double) min) * 1.0E-6D;
|
||||||
|
+ double maxD = ((double) max) * 1.0E-6D;
|
||||||
|
+ return Arrays.asList(getColor(avgD), getColor(minD), getColor(maxD));
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ private static String getColor(double avg) {
|
||||||
|
+ return ChatColor.COLOR_CHAR + (avg >= 50 ? "c" : avg >= 40 ? "e" : "a") + DF.format(avg);
|
||||||
|
+ }
|
||||||
|
+}
|
||||||
|
diff --git a/src/main/java/com/destroystokyo/paper/PaperConfig.java b/src/main/java/com/destroystokyo/paper/PaperConfig.java
|
||||||
|
index 6916ed30c..1c4cd3635 100644
|
||||||
|
--- a/src/main/java/com/destroystokyo/paper/PaperConfig.java
|
||||||
|
+++ b/src/main/java/com/destroystokyo/paper/PaperConfig.java
|
||||||
|
@@ -70,6 +70,7 @@ public class PaperConfig {
|
||||||
|
|
||||||
|
commands = new HashMap<String, Command>();
|
||||||
|
commands.put("paper", new PaperCommand("paper"));
|
||||||
|
+ commands.put("mspt", new MSPTCommand("mspt"));
|
||||||
|
|
||||||
|
version = getInt("config-version", 20);
|
||||||
|
set("config-version", 20);
|
||||||
|
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
|
||||||
|
index c9deaffc4..9e5d569f7 100644
|
||||||
|
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
|
||||||
|
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
|
||||||
|
@@ -106,6 +106,11 @@ public abstract class MinecraftServer extends IAsyncTaskHandlerReentrant<TickTas
|
||||||
|
private int G;
|
||||||
|
private int H;
|
||||||
|
public final long[] f = new long[100]; public long[] getTickTimes() { return f; } // Paper - OBFHELPER
|
||||||
|
+ // Paper start
|
||||||
|
+ public final TickTimes tickTimes5s = new TickTimes(100);
|
||||||
|
+ public final TickTimes tickTimes10s = new TickTimes(200);
|
||||||
|
+ public final TickTimes tickTimes60s = new TickTimes(1200);
|
||||||
|
+ // Paper end
|
||||||
|
@Nullable
|
||||||
|
private KeyPair I;
|
||||||
|
@Nullable
|
||||||
|
@@ -1160,6 +1165,12 @@ public abstract class MinecraftServer extends IAsyncTaskHandlerReentrant<TickTas
|
||||||
|
this.methodProfiler.enter("tallying");
|
||||||
|
long l = this.f[this.ticks % 100] = SystemUtils.getMonotonicNanos() - i;
|
||||||
|
|
||||||
|
+ // Paper start
|
||||||
|
+ tickTimes5s.add(this.ticks, l);
|
||||||
|
+ tickTimes10s.add(this.ticks, l);
|
||||||
|
+ tickTimes60s.add(this.ticks, l);
|
||||||
|
+ // Paper end
|
||||||
|
+
|
||||||
|
this.av = this.av * 0.8F + (float) l / 1000000.0F * 0.19999999F;
|
||||||
|
long i1 = SystemUtils.getMonotonicNanos();
|
||||||
|
|
||||||
|
@@ -2254,4 +2265,30 @@ public abstract class MinecraftServer extends IAsyncTaskHandlerReentrant<TickTas
|
||||||
|
return SERVER; // Paper
|
||||||
|
}
|
||||||
|
// CraftBukkit end
|
||||||
|
+
|
||||||
|
+ // Paper start
|
||||||
|
+ public static class TickTimes {
|
||||||
|
+ private final long[] times;
|
||||||
|
+
|
||||||
|
+ public TickTimes(int length) {
|
||||||
|
+ times = new long[length];
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ void add(int index, long time) {
|
||||||
|
+ times[index % times.length] = time;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ public long[] getTimes() {
|
||||||
|
+ return times.clone();
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ public double getAverage() {
|
||||||
|
+ long total = 0L;
|
||||||
|
+ for (long value : times) {
|
||||||
|
+ total += value;
|
||||||
|
+ }
|
||||||
|
+ return ((double) total / (double) times.length) * 1.0E-6D;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ // Paper end
|
||||||
|
}
|
||||||
|
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
|
||||||
|
index b9a398bc5..53b71b791 100644
|
||||||
|
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
|
||||||
|
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
|
||||||
|
@@ -2052,6 +2052,16 @@ public final class CraftServer implements Server {
|
||||||
|
net.minecraft.server.MinecraftServer.getServer().tps15.getAverage()
|
||||||
|
};
|
||||||
|
}
|
||||||
|
+
|
||||||
|
+ @Override
|
||||||
|
+ public long[] getTickTimes() {
|
||||||
|
+ return getServer().tickTimes5s.getTimes();
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ @Override
|
||||||
|
+ public double getAverageTickTime() {
|
||||||
|
+ return getServer().tickTimes5s.getAverage();
|
||||||
|
+ }
|
||||||
|
// Paper end
|
||||||
|
|
||||||
|
private final Spigot spigot = new Spigot()
|
||||||
|
--
|
||||||
|
2.24.0
|
||||||
|
|
Laden…
In neuem Issue referenzieren
Einen Benutzer sperren