mirror of
https://github.com/Minestom/Minestom.git
synced 2025-03-02 11:21:15 +01:00
Added TickMonitor
This commit is contained in:
parent
c347f55c1f
commit
5adbc287b3
@ -2,7 +2,7 @@ package net.minestom.server;
|
||||
|
||||
import net.minestom.server.advancements.AdvancementManager;
|
||||
import net.minestom.server.adventure.bossbar.BossBarManager;
|
||||
import net.minestom.server.benchmark.BenchmarkManager;
|
||||
import net.minestom.server.monitoring.BenchmarkManager;
|
||||
import net.minestom.server.command.CommandManager;
|
||||
import net.minestom.server.data.DataManager;
|
||||
import net.minestom.server.data.DataType;
|
||||
|
@ -4,6 +4,7 @@ import com.google.common.collect.Queues;
|
||||
import net.minestom.server.instance.Chunk;
|
||||
import net.minestom.server.instance.Instance;
|
||||
import net.minestom.server.instance.InstanceManager;
|
||||
import net.minestom.server.monitoring.TickMonitor;
|
||||
import net.minestom.server.network.ConnectionManager;
|
||||
import net.minestom.server.network.player.NettyPlayerConnection;
|
||||
import net.minestom.server.thread.PerInstanceThreadProvider;
|
||||
@ -13,10 +14,8 @@ import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Queue;
|
||||
import java.util.concurrent.Executors;
|
||||
import java.util.concurrent.Future;
|
||||
import java.util.concurrent.ScheduledExecutorService;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.concurrent.*;
|
||||
import java.util.function.Consumer;
|
||||
import java.util.function.LongConsumer;
|
||||
|
||||
/**
|
||||
@ -36,6 +35,7 @@ public final class UpdateManager {
|
||||
|
||||
private final Queue<LongConsumer> tickStartCallbacks = Queues.newConcurrentLinkedQueue();
|
||||
private final Queue<LongConsumer> tickEndCallbacks = Queues.newConcurrentLinkedQueue();
|
||||
private final List<Consumer<TickMonitor>> tickMonitors = new CopyOnWriteArrayList<>();
|
||||
|
||||
{
|
||||
// DEFAULT THREAD PROVIDER
|
||||
@ -81,7 +81,14 @@ public final class UpdateManager {
|
||||
final long tickTime = System.nanoTime() - currentTime;
|
||||
|
||||
// Tick end callbacks
|
||||
doTickCallback(tickEndCallbacks, tickTime / 1000000L);
|
||||
doTickCallback(tickEndCallbacks, tickTime);
|
||||
|
||||
// Monitoring
|
||||
if (!tickMonitors.isEmpty()) {
|
||||
final double tickTimeMs = tickTime / 1e6D;
|
||||
final TickMonitor tickMonitor = new TickMonitor(tickTimeMs);
|
||||
this.tickMonitors.forEach(consumer -> consumer.accept(tickMonitor));
|
||||
}
|
||||
|
||||
// Flush all waiting packets
|
||||
AsyncUtils.runAsync(() -> connectionManager.getOnlinePlayers().stream()
|
||||
@ -246,6 +253,14 @@ public final class UpdateManager {
|
||||
this.tickEndCallbacks.remove(callback);
|
||||
}
|
||||
|
||||
public void addTickMonitor(@NotNull Consumer<TickMonitor> consumer) {
|
||||
this.tickMonitors.add(consumer);
|
||||
}
|
||||
|
||||
public void removeTickMonitor(@NotNull Consumer<TickMonitor> consumer) {
|
||||
this.tickMonitors.remove(consumer);
|
||||
}
|
||||
|
||||
/**
|
||||
* Stops the server loop.
|
||||
*/
|
||||
|
@ -1,4 +1,4 @@
|
||||
package net.minestom.server.benchmark;
|
||||
package net.minestom.server.monitoring;
|
||||
|
||||
import it.unimi.dsi.fastutil.longs.Long2LongMap;
|
||||
import it.unimi.dsi.fastutil.longs.Long2LongOpenHashMap;
|
@ -1,4 +1,4 @@
|
||||
package net.minestom.server.benchmark;
|
||||
package net.minestom.server.monitoring;
|
||||
|
||||
public class ThreadResult {
|
||||
|
@ -0,0 +1,14 @@
|
||||
package net.minestom.server.monitoring;
|
||||
|
||||
public class TickMonitor {
|
||||
|
||||
private final double tickTime;
|
||||
|
||||
public TickMonitor(double tickTime) {
|
||||
this.tickTime = tickTime;
|
||||
}
|
||||
|
||||
public double getTickTime() {
|
||||
return tickTime;
|
||||
}
|
||||
}
|
@ -22,8 +22,6 @@ public class Main {
|
||||
public static void main(String[] args) {
|
||||
MinecraftServer minecraftServer = MinecraftServer.init();
|
||||
|
||||
// MinecraftServer.setShouldProcessNettyErrors(true);
|
||||
|
||||
BlockManager blockManager = MinecraftServer.getBlockManager();
|
||||
blockManager.registerCustomBlock(new CustomBlockSample());
|
||||
blockManager.registerCustomBlock(new UpdatableBlockDemo());
|
||||
|
@ -1,11 +1,11 @@
|
||||
package demo;
|
||||
|
||||
import com.google.common.util.concurrent.AtomicDouble;
|
||||
import demo.generator.ChunkGeneratorDemo;
|
||||
import demo.generator.NoiseTestGenerator;
|
||||
import net.kyori.adventure.text.Component;
|
||||
import net.minestom.server.MinecraftServer;
|
||||
import net.minestom.server.adventure.audience.Audiences;
|
||||
import net.minestom.server.benchmark.BenchmarkManager;
|
||||
import net.minestom.server.chat.ColoredText;
|
||||
import net.minestom.server.entity.Entity;
|
||||
import net.minestom.server.entity.GameMode;
|
||||
@ -28,8 +28,10 @@ import net.minestom.server.inventory.InventoryType;
|
||||
import net.minestom.server.inventory.PlayerInventory;
|
||||
import net.minestom.server.item.ItemStack;
|
||||
import net.minestom.server.item.Material;
|
||||
import net.minestom.server.monitoring.BenchmarkManager;
|
||||
import net.minestom.server.network.ConnectionManager;
|
||||
import net.minestom.server.ping.ResponseDataConsumer;
|
||||
import net.minestom.server.utils.MathUtils;
|
||||
import net.minestom.server.utils.Position;
|
||||
import net.minestom.server.utils.Vector;
|
||||
import net.minestom.server.utils.inventory.PlayerInventoryUtils;
|
||||
@ -64,10 +66,15 @@ public class PlayerInit {
|
||||
//inventory.setItemStack(3, new ItemStack(Material.DIAMOND, (byte) 34));
|
||||
}
|
||||
|
||||
private static final AtomicDouble LAST_TICK_TIME = new AtomicDouble();
|
||||
|
||||
public static void init() {
|
||||
ConnectionManager connectionManager = MinecraftServer.getConnectionManager();
|
||||
BenchmarkManager benchmarkManager = MinecraftServer.getBenchmarkManager();
|
||||
|
||||
MinecraftServer.getUpdateManager().addTickMonitor(tickMonitor ->
|
||||
LAST_TICK_TIME.set(tickMonitor.getTickTime()));
|
||||
|
||||
MinecraftServer.getSchedulerManager().buildTask(() -> {
|
||||
|
||||
Collection<Player> players = connectionManager.getOnlinePlayers();
|
||||
@ -78,7 +85,9 @@ public class PlayerInit {
|
||||
long ramUsage = benchmarkManager.getUsedMemory();
|
||||
ramUsage /= 1e6; // bytes to MB
|
||||
|
||||
final Component header = Component.text("RAM USAGE: " + ramUsage + " MB");
|
||||
final Component header = Component.text("RAM USAGE: " + ramUsage + " MB")
|
||||
.append(Component.newline())
|
||||
.append(Component.text("TICK TIME: " + MathUtils.round(LAST_TICK_TIME.get(), 2) + "ms"));
|
||||
final Component footer = benchmarkManager.getCpuMonitoringMessage();
|
||||
Audiences.players().sendPlayerListHeaderAndFooter(header, footer);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user