From 3c74a808f3ad06c6175204ec72b35bfd4aabcc7d Mon Sep 17 00:00:00 2001 From: opfromthestart Date: Mon, 12 Apr 2021 20:35:29 -0400 Subject: [PATCH] Added Queue +Added Queue class *Replaced TPS Averager with a Queue --- .../progressia/server/ServerThread.java | 2 +- .../progressia/test/LayerTestGUI.java | 49 ++++++++++++++++++- 2 files changed, 48 insertions(+), 3 deletions(-) diff --git a/src/main/java/ru/windcorp/progressia/server/ServerThread.java b/src/main/java/ru/windcorp/progressia/server/ServerThread.java index 90f3ce9..8aee325 100644 --- a/src/main/java/ru/windcorp/progressia/server/ServerThread.java +++ b/src/main/java/ru/windcorp/progressia/server/ServerThread.java @@ -64,7 +64,7 @@ public class ServerThread implements Runnable { public void start() { ticker.start(); - executor.scheduleAtFixedRate(this, 0, 1000 / 20, TimeUnit.MILLISECONDS); + executor.scheduleAtFixedRate(this, 0, 1000 / 47, TimeUnit.MILLISECONDS); } @Override diff --git a/src/main/java/ru/windcorp/progressia/test/LayerTestGUI.java b/src/main/java/ru/windcorp/progressia/test/LayerTestGUI.java index ddf273f..91a3df7 100755 --- a/src/main/java/ru/windcorp/progressia/test/LayerTestGUI.java +++ b/src/main/java/ru/windcorp/progressia/test/LayerTestGUI.java @@ -330,12 +330,57 @@ public class LayerTestGUI extends GUILayer { } + private static class Queue { + + private static final int DISPLAY_INERTIA = 32; + private static final double UPDATE_INTERVAL = Units.get(50.0, "ms"); + + private final double[] values = new double[DISPLAY_INERTIA]; + private int size; + private int head; + + private long lastUpdate; + + public void add(double value) { + if (size == values.length) { + values[head] = value; + head++; + if (head == values.length) + head = 0; + } else { + values[size] = value; + size++; + } + } + + public double average() { + if (size == values.length && head!=0) { + return (values[head-1]-values[head])/DISPLAY_INERTIA*20; + } else if (head==0) { + return (values[size-1]-values[0])/DISPLAY_INERTIA*20; + } else { + return values[head-1]/size*20; + } + } + + public double update(double value) { + long now = (long) (GraphicsInterface.getTime() / UPDATE_INTERVAL); + if (lastUpdate != now) { + lastUpdate = now; + add(value); + } + + return average(); + } + + } + private static final Averager FPS_RECORD = new Averager(); - private static final Counter TPS_RECORD = new Counter(4000, 25); + private static final Queue TPS_RECORD = new Queue(); private static final Supplier TPS_STRING = DynamicStrings.builder() .addDyn(new MutableStringLocalized("LayerTestGUI.TPSDisplay")) - .addDyn(() -> TPS_RECORD.update(), 5, 1) + .addDyn(() -> TPS_RECORD.update(ServerState.getInstance().getUptimeTicks()), 5, 1) .buildSupplier(); private static final Supplier POS_STRING = DynamicStrings.builder()