From 5cc4a8d1a4ee0c10b400471c0659b7f0510e68f7 Mon Sep 17 00:00:00 2001 From: DmitriyMX Date: Tue, 12 Jun 2018 18:00:02 +0300 Subject: [PATCH] =?UTF-8?q?=D0=BE=D1=82=D0=B4=D0=B5=D0=BB=D1=8C=D0=BD?= =?UTF-8?q?=D1=8B=D0=B9=20=D0=BA=D0=BB=D0=B0=D1=81=D1=81=20=D0=B4=D0=BB?= =?UTF-8?q?=D1=8F=20=D1=81=D0=BB=D0=B5=D0=B6=D0=BA=D0=B8=20=D0=B7=D0=B0=20?= =?UTF-8?q?tps?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/src/main/java/mc/core/GameLoop.java | 51 +++----------- core/src/main/java/mc/core/TpsWatcher.java | 82 ++++++++++++++++++++++ 2 files changed, 93 insertions(+), 40 deletions(-) create mode 100644 core/src/main/java/mc/core/TpsWatcher.java diff --git a/core/src/main/java/mc/core/GameLoop.java b/core/src/main/java/mc/core/GameLoop.java index 9a2a23f..2946302 100644 --- a/core/src/main/java/mc/core/GameLoop.java +++ b/core/src/main/java/mc/core/GameLoop.java @@ -12,15 +12,9 @@ import org.springframework.beans.factory.annotation.Autowired; @Slf4j public class GameLoop extends Thread { + private final TpsWatcher TPS_WATCHER = TpsWatcher.getInstance(); @Autowired - PlayerManager playerManager; - - /* TPS */ - private int tps; - private long pause; - @Setter - private boolean traceTPS = false; - private int lowTps; + private PlayerManager playerManager; /* Time */ @Setter @@ -33,41 +27,23 @@ public class GameLoop extends Thread { } public void setPercentWarnLowTps(int value) { - if (value > 100) { - log.warn("Percent warn low TPS can't be '{}'. Set 100", tps); - value = 100; - } - - this.lowTps = tps - (int)(tps * (value / 100f)); + TPS_WATCHER.setPercentWarnLowTps(value); } public void setTps(int tps) { - if (tps > 1000) { - log.warn("TPS can't be '{}'. Set 1000", tps); - tps = 1000; - } - this.tps = tps; - this.pause = (1000 / tps); + TPS_WATCHER.setTps(tps); + } + + public void setTps(boolean value) { + TPS_WATCHER.setTraceTPS(value); } @Override public void run() { - log.info("Target TPS: {}; Low TPS: {}", tps, lowTps); - int factTps = 0; - long lastTime = System.currentTimeMillis(); + TPS_WATCHER.startWatch(); while (!isInterrupted()) { - if ((System.currentTimeMillis() - lastTime) > 1000) { - lastTime = System.currentTimeMillis(); - if (factTps < lowTps) { - log.warn("Low TPS: {}/{}", factTps, tps); - } else if (traceTPS) { - log.info("TPS: {}/{}", factTps, tps); - } - factTps = 0; - } - - long futureTime = System.currentTimeMillis() + pause; + TPS_WATCHER.check(); /* --- --- --- */ @@ -76,12 +52,7 @@ public class GameLoop extends Thread { /* --- --- --- */ - factTps++; - try { - long pause = futureTime - System.currentTimeMillis(); - Thread.sleep((pause <= 0 ? 0 : pause)); - } catch (InterruptedException ignored) { - } + TPS_WATCHER.tick(); } } } diff --git a/core/src/main/java/mc/core/TpsWatcher.java b/core/src/main/java/mc/core/TpsWatcher.java new file mode 100644 index 0000000..25c43e7 --- /dev/null +++ b/core/src/main/java/mc/core/TpsWatcher.java @@ -0,0 +1,82 @@ +/* + * DmitriyMX + * 2018-06-12 + */ +package mc.core; + +import lombok.extern.slf4j.Slf4j; + +@Slf4j +class TpsWatcher { + private static final TpsWatcher instance = new TpsWatcher(); + + private boolean traceTps = false; + + private int tps; + private long pause; + private int lowTps; + private int percentLowTps; + + private int factTps; + private long lastTime; + private long futureTime; + + public static TpsWatcher getInstance() { + return instance; + } + + private TpsWatcher(){ } + + public void setTps(int value) { + if (value > 1000) { + log.warn("TPS can't be '{}'. Set 1000", value); + value = 1000; + } + + tps = value; + pause = (1000 / value); + } + + public void setPercentWarnLowTps(int value) { + if (value > 100) { + log.warn("Percent warn low TPS can't be '{}'. Set 100", value); + value = 100; + } + + lowTps = tps - (int)(tps * (value / 100f)); + percentLowTps = value; + } + + public void setTraceTPS(boolean value) { + traceTps = value; + } + + public void startWatch() { + log.info("Target TPS: {}; Low TPS: {}({}%)", tps, lowTps, percentLowTps); + factTps = 0; + lastTime = System.currentTimeMillis(); + } + + public void check() { + if ((System.currentTimeMillis() - lastTime) > 1000) { + lastTime = System.currentTimeMillis(); + if (factTps < lowTps) { + log.warn("Low TPS: {}/{}", factTps, tps); + } else if (traceTps) { + log.trace("TPS: {}/{}", factTps, tps); + } + factTps = 0; + } + + futureTime = System.currentTimeMillis() + pause; + } + + public void tick() { + factTps++; + try { + long pause = futureTime - System.currentTimeMillis(); + Thread.sleep((pause <= 0 ? 0 : pause)); + } catch (InterruptedException ignored) { + } + } +}