Files
Purpur/patches/server/0051-Add-tick-times-API.patch
William Blake Galbreath c1846b3cb5 Add /mspt command
2020-03-13 23:44:05 -05:00

95 lines
3.2 KiB
Diff

From c38297ba3c2cb464c63bce271ae3ab538915645c Mon Sep 17 00:00:00 2001
From: William Blake Galbreath <Blake.Galbreath@GMail.com>
Date: Thu, 30 Jan 2020 00:41:24 -0600
Subject: [PATCH] Add tick times API
---
.../net/minecraft/server/MinecraftServer.java | 37 +++++++++++++++++++
.../org/bukkit/craftbukkit/CraftServer.java | 12 ++++++
2 files changed, 49 insertions(+)
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
index f2a8af48df..0889cef15d 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
+ // Purpur start
+ public final TickTimes tickTimes5s = new TickTimes(100);
+ public final TickTimes tickTimes10s = new TickTimes(200);
+ public final TickTimes tickTimes60s = new TickTimes(1200);
+ // Purpur 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;
+ // Purpur start
+ tickTimes5s.add(this.ticks % 100, l);
+ tickTimes10s.add(this.ticks % 200, l);
+ tickTimes60s.add(this.ticks % 1200, l);
+ // Purpur end
+
this.av = this.av * 0.8F + (float) l / 1000000.0F * 0.19999999F;
long i1 = SystemUtils.getMonotonicNanos();
@@ -2253,4 +2264,30 @@ public abstract class MinecraftServer extends IAsyncTaskHandlerReentrant<TickTas
return SERVER; // Paper
}
// CraftBukkit end
+
+ // Purpur 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] = 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;
+ }
+ }
+ // Purpur end
}
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
index d293bf27ac..32238d13b1 100644
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
@@ -2233,4 +2233,16 @@ public final class CraftServer implements Server {
return net.minecraft.server.MinecraftServer.currentTick;
}
// Paper end
+
+ // Purpur start
+ @Override
+ public long[] getTickTimes() {
+ return getServer().tickTimes5s.getTimes();
+ }
+
+ @Override
+ public double getAverageTickTime() {
+ return getServer().tickTimes5s.getAverage();
+ }
+ // Purpur end
}
--
2.24.0