SteamWar/SpigotCore
Archiviert
13
0

Add TPSWatcher #62

Manuell gemergt
Lixfel hat 9 Commits von TPS nach master 2020-11-07 11:06:32 +01:00 zusammengeführt
8 geänderte Dateien mit 137 neuen und 50 gelöschten Zeilen
Nur Änderungen aus Commit bb2bf2577e werden angezeigt - Alle Commits anzeigen

Datei anzeigen

@ -0,0 +1,13 @@
package de.steamwar.core;
Veraltet
Review

Licence fehlt

Licence fehlt
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;
Veraltet
Review

Licence fehlt

Licence fehlt
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;
Veraltet
Review

Licence fehlt

Licence fehlt
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;
Veraltet
Review

Licence fehlt

Licence fehlt
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;
Veraltet
Review

Licence fehlt

Licence fehlt
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;
Veraltet
Review

Licence fehlt

Licence fehlt
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{
private static Core instance;
private static final int version;
private static TPSWatcher tpsWatcher;
static{
String packageName = Bukkit.getServer().getClass().getPackage().getName();
@ -53,7 +52,6 @@ public class Core extends JavaPlugin{
@Override
public void onLoad() {
setInstance(this);
tpsWatcher = new TPSWatcher();
}
@Override
@ -82,10 +80,6 @@ public class Core extends JavaPlugin{
return version;
}
public static TPSWatcher getTpsWatcher() {
return tpsWatcher;
}
private static void setInstance(Core instance) {
Core.instance = instance;
}

Datei anzeigen

@ -21,45 +21,20 @@ package de.steamwar.core;
import org.bukkit.Bukkit;
import java.util.Iterator;
import java.util.LinkedList;
public class TPSWatcher {
private LinkedList<Double> meter = new LinkedList<>();
private int count = 30;
private static final double tickTimeDefault = 1000;
private static final double tickDefault = 20.0;
private double sum = 0;
private int sumCount = 0;
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 static TPSWatcher tps_OneSecond = new TPSWatcher(1000);
Veraltet
Review

Da wir weder die statistische Abweichung messen noch die Werte irgendwo hier speichern, ist meiner Meinung nach jegliche Liste hier verkehrt. Es reicht, wenn sich der 10s-Durchschnitt alle 10s aktualisiert und der 1s-Durchschnitt sich sekündlich aktualisiert, da muss nicht jeder Tick da sein => Keine Listen nötig. Ich möchte eine Implementierung ohne jegliche Listen.

Da wir weder die statistische Abweichung messen noch die Werte irgendwo hier speichern, ist meiner Meinung nach jegliche Liste hier verkehrt. Es reicht, wenn sich der 10s-Durchschnitt alle 10s aktualisiert und der 1s-Durchschnitt sich sekündlich aktualisiert, da muss nicht jeder Tick da sein => Keine Listen nötig. Ich möchte eine Implementierung ohne jegliche Listen.
Veraltet
Review

Warum können wir nicht auch die 10s immer passend die letzten 10 Sekunden anzeigt und nicht nach 10 Sekunden dann mal wieder die letzten 10 Sekunden, dass finde ich auch nicht so sinnvoll. Ich überlege mal ob ich das anders machen kann

Warum können wir nicht auch die 10s immer passend die letzten 10 Sekunden anzeigt und nicht nach 10 Sekunden dann mal wieder die letzten 10 Sekunden, dass finde ich auch nicht so sinnvoll. Ich überlege mal ob ich das anders machen kann
Veraltet
Review

Weil wir dann 10 Werte cachen müssen. Deshalb. Ist wesentlich aufwändiger und aufwändiger zu warten für einen wesentlich geringeren Vorteil

Weil wir dann 10 Werte cachen müssen. Deshalb. Ist wesentlich aufwändiger und aufwändiger zu warten für einen wesentlich geringeren Vorteil
private static TPSWatcher tps_TenSecond = new TPSWatcher(10000);
private long lastTime = System.currentTimeMillis();
private static final double tickTimeDefault = 1000 / 20.0;
private static final double tickDefault = 20.0;
private double tps = 20.0;
TPSWatcher() {
private TPSWatcher(long timeInterval) {
timeInterval = timeInterval / 50;
Bukkit.getScheduler().runTaskTimer(Core.getInstance(), () -> {
long tickTime = System.currentTimeMillis() - lastTime;
lastTime = System.currentTimeMillis();
@ -68,25 +43,65 @@ public class TPSWatcher {
if (tickTime != 0) {
now = (tickTimeDefault / tickTime) * tickDefault;
Veraltet
Review

Wann wird now < 0?

Wann wird now < 0?
}
add(now);
}, 1, 1);
if (now < 0) {
now = 0;
}
tps = now;
}, timeInterval, timeInterval);
}
public enum TpsAverage {
LAST_SECOND(1),
LAST_TEN_SECONDS(10),
LAST_THIRTY_SECONDS(30);
public enum TPSType {
private final int count;
// With own implementation
ONE_SECOND,
TEN_SECONDS,
// With getting the values from Spigot itself
ONE_MINUTE,
FIVE_MINUTES,
TEN_MINUTES
Veraltet
Review

Ich hätte gernde die Funktionalität als Static-Funktionalität, da wir sowieso nie mehr als einen TPSWatcher benötigen werden und der Aufruf für den Erhalt von TPS Werten kürzer wird.

Ich hätte gernde die Funktionalität als Static-Funktionalität, da wir sowieso nie mehr als einen TPSWatcher benötigen werden und der Aufruf für den Erhalt von TPS Werten kürzer wird.
TpsAverage(int count) {
this.count = count;
}
public double getTPS() {
Veraltet
Review

Das hier, nur das hier einfach alle 1s bzw. alle 10s ausführen, und du hast deine DurchschnittsTPS für die letzte 1s/10s.

Das hier, nur das hier einfach alle 1s bzw. alle 10s ausführen, und du hast deine DurchschnittsTPS für die letzte 1s/10s.
Veraltet
Review

Kann ich es einfach jede Sekunde machen, und dann 10 werte merken für 10 Sekunden? Das ganze könnte ich in einem fixen array speichern und auswerten

Kann ich es einfach jede Sekunde machen, und dann 10 werte merken für 10 Sekunden? Das ganze könnte ich in einem fixen array speichern und auswerten
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]);
Veraltet
Review

30s erscheint mir unnötig.

30s erscheint mir unnötig.
Veraltet
Review

Ok dann werde ich diesen Wert rausstreichen

Ok dann werde ich diesen Wert rausstreichen
default:
return round(tps_OneSecond.tps);
}
}
public double getTPS(TpsAverage average) {
return average(average.count);
private double[] getSpigotTPS() {
switch (Core.getVersion()) {
case 8:
return SpigotTPS_8.getTps();
case 9:
Veraltet
Review

Ich würde gerne mit dieser Methode wenn dann ALLE verfügbaren TPS-Werte bekommen wollen, auch die von Spigot gemessenen.

Ich würde gerne mit dieser Methode wenn dann ALLE verfügbaren TPS-Werte bekommen wollen, auch die von Spigot gemessenen.
Veraltet
Review

Ok also willst du das dann als array oder liste?

Ok also willst du das dann als array oder liste?
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();
}
}
Veraltet
Review

Bitte noch auf maximal 20 TPS limiten, das verwirrt ansonsten die Leute immer total

Bitte noch auf maximal 20 TPS limiten, das verwirrt ansonsten die Leute immer total
private double round(double d) {
return Math.round(d * 10) / 10.0;
}
}