SteamWar/SpigotCore
Archiviert
13
0

Optimize TPSWatcher

Remove 30 seconds TPSWatching
Dieser Commit ist enthalten in:
jojo 2020-10-04 18:11:19 +02:00
Ursprung f83b1359c6
Commit bb2bf2577e
8 geänderte Dateien mit 137 neuen und 50 gelöschten Zeilen

Datei anzeigen

@ -0,0 +1,13 @@
package de.steamwar.core;
import net.minecraft.server.v1_10_R1.MinecraftServer;
public class SpigotTPS_10 {
private SpigotTPS_10(){}
static double[] getTps(){
return MinecraftServer.getServer().recentTps;
}
}

Datei anzeigen

@ -0,0 +1,13 @@
package de.steamwar.core;
import net.minecraft.server.v1_12_R1.MinecraftServer;
public class SpigotTPS_12 {
private SpigotTPS_12(){}
static double[] getTps(){
return MinecraftServer.getServer().recentTps;
}
}

Datei anzeigen

@ -0,0 +1,13 @@
package de.steamwar.core;
import net.minecraft.server.v1_14_R1.MinecraftServer;
public class SpigotTPS_14 {
private SpigotTPS_14(){}
static double[] getTps(){
return MinecraftServer.getServer().recentTps;
}
}

Datei anzeigen

@ -0,0 +1,13 @@
package de.steamwar.core;
import net.minecraft.server.v1_15_R1.MinecraftServer;
public class SpigotTPS_15 {
private SpigotTPS_15(){}
static double[] getTps(){
return MinecraftServer.getServer().recentTps;
}
}

Datei anzeigen

@ -0,0 +1,13 @@
package de.steamwar.core;
import net.minecraft.server.v1_8_R3.MinecraftServer;
public class SpigotTPS_8 {
private SpigotTPS_8(){}
static double[] getTps(){
return MinecraftServer.getServer().recentTps;
}
}

Datei anzeigen

@ -0,0 +1,13 @@
package de.steamwar.core;
import net.minecraft.server.v1_9_R2.MinecraftServer;
public class SpigotTPS_9 {
private SpigotTPS_9(){}
static double[] getTps(){
return MinecraftServer.getServer().recentTps;
}
}

Datei anzeigen

@ -32,7 +32,6 @@ import org.bukkit.plugin.java.JavaPlugin;
public class Core extends JavaPlugin{ public class Core extends JavaPlugin{
private static Core instance; private static Core instance;
private static final int version; private static final int version;
private static TPSWatcher tpsWatcher;
static{ static{
String packageName = Bukkit.getServer().getClass().getPackage().getName(); String packageName = Bukkit.getServer().getClass().getPackage().getName();
@ -53,7 +52,6 @@ public class Core extends JavaPlugin{
@Override @Override
public void onLoad() { public void onLoad() {
setInstance(this); setInstance(this);
tpsWatcher = new TPSWatcher();
} }
@Override @Override
@ -82,10 +80,6 @@ public class Core extends JavaPlugin{
return version; return version;
} }
public static TPSWatcher getTpsWatcher() {
return tpsWatcher;
}
private static void setInstance(Core instance) { private static void setInstance(Core instance) {
Core.instance = instance; Core.instance = instance;
} }

Datei anzeigen

@ -21,45 +21,20 @@ package de.steamwar.core;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import java.util.Iterator;
import java.util.LinkedList;
public class TPSWatcher { public class TPSWatcher {
private LinkedList<Double> meter = new LinkedList<>(); private static final double tickTimeDefault = 1000;
private int count = 30; private static final double tickDefault = 20.0;
private double sum = 0; private static TPSWatcher tps_OneSecond = new TPSWatcher(1000);
private int sumCount = 0; private static TPSWatcher tps_TenSecond = new TPSWatcher(10000);
private void add(double tps) {
sum += tps;
sumCount++;
if (sumCount > 20) {
meter.addLast(sum);
if (meter.size() > count) meter.removeFirst();
sum = 0;
sumCount = 0;
}
}
private double average(int count) {
count = Math.min(count, meter.size());
if (count == 0) return 20.0;
Iterator<Double> doubleIterator = meter.iterator();
double total = 0;
for (int i = 0; i < count; i++) {
total += doubleIterator.next();
}
return total / count;
}
private long lastTime = System.currentTimeMillis(); private long lastTime = System.currentTimeMillis();
private static final double tickTimeDefault = 1000 / 20.0; private double tps = 20.0;
private static final double tickDefault = 20.0;
TPSWatcher() { private TPSWatcher(long timeInterval) {
timeInterval = timeInterval / 50;
Bukkit.getScheduler().runTaskTimer(Core.getInstance(), () -> { Bukkit.getScheduler().runTaskTimer(Core.getInstance(), () -> {
long tickTime = System.currentTimeMillis() - lastTime; long tickTime = System.currentTimeMillis() - lastTime;
lastTime = System.currentTimeMillis(); lastTime = System.currentTimeMillis();
@ -68,25 +43,65 @@ public class TPSWatcher {
if (tickTime != 0) { if (tickTime != 0) {
now = (tickTimeDefault / tickTime) * tickDefault; now = (tickTimeDefault / tickTime) * tickDefault;
} }
add(now); if (now < 0) {
}, 1, 1); now = 0;
}
tps = now;
}, timeInterval, timeInterval);
} }
public enum TpsAverage { public enum TPSType {
LAST_SECOND(1),
LAST_TEN_SECONDS(10),
LAST_THIRTY_SECONDS(30);
private final int count; // With own implementation
ONE_SECOND,
TpsAverage(int count) { TEN_SECONDS,
this.count = count; // With getting the values from Spigot itself
} ONE_MINUTE,
FIVE_MINUTES,
TEN_MINUTES
} }
public double getTPS(TpsAverage average) { public double getTPS() {
return average(average.count); return getTPS(TPSType.ONE_SECOND);
}
public double getTPS(TPSType tpsType) {
switch (tpsType) {
case TEN_SECONDS:
return round(tps_TenSecond.tps);
case ONE_MINUTE:
return round(getSpigotTPS()[0]);
case FIVE_MINUTES:
return round(getSpigotTPS()[1]);
case TEN_MINUTES:
return round(getSpigotTPS()[2]);
default:
return round(tps_OneSecond.tps);
}
}
private double[] getSpigotTPS() {
switch (Core.getVersion()) {
case 8:
return SpigotTPS_8.getTps();
case 9:
return SpigotTPS_9.getTps();
case 10:
return SpigotTPS_10.getTps();
case 14:
return SpigotTPS_14.getTps();
case 15:
return SpigotTPS_15.getTps();
default:
return SpigotTPS_12.getTps();
}
}
private double round(double d) {
return Math.round(d * 10) / 10.0;
} }
} }