Break out network monitor debug window
All checks were successful
studiorailgun/Renderer/pipeline/head This commit looks good

This commit is contained in:
austin 2024-11-23 17:09:55 -05:00
parent e20843d3f4
commit e33706c21d
4 changed files with 83 additions and 40 deletions

View File

@ -1135,6 +1135,7 @@ Break out dependency documentation into a dedicated file
Fix terrain editing
Fix foliage not updating at edited chunk
Dedicated control for opening crafting
Break out network imgui debug window
# TODO

View File

@ -1,8 +1,6 @@
package electrosphere.client.ui.menu.debug;
import electrosphere.engine.Globals;
import electrosphere.renderer.ui.imgui.ImGuiLinePlot;
import electrosphere.renderer.ui.imgui.ImGuiLinePlot.ImGuiLinePlotDataset;
import electrosphere.renderer.ui.imgui.ImGuiWindow;
import electrosphere.renderer.ui.imgui.ImGuiWindow.ImGuiWindowCallback;
import imgui.ImGui;
@ -32,52 +30,14 @@ public class ImGuiChunkMonitor {
protected static void createChunkMonitorWindow(){
chunkMonitorWindow = new ImGuiWindow("Chunk Monitor");
//client network pressure graph
ImGuiLinePlot clientNetworkBandwith = new ImGuiLinePlot("Client Network Pressure",400,400);
ImGuiLinePlotDataset clientPressureDataset = new ImGuiLinePlotDataset("Client bytes per frame", PRESSURE_GRAPH_POINT_COUNT);
clientPressureDataset.zeroOut();
clientNetworkBandwith.addDataset(clientPressureDataset);
//server network pressure graph
ImGuiLinePlot serverNetworkPressureGraph = new ImGuiLinePlot("Server Network Pressure",400,400);
ImGuiLinePlotDataset serverPressureDataset = new ImGuiLinePlotDataset("Server bytes per frame", PRESSURE_GRAPH_POINT_COUNT);
serverPressureDataset.zeroOut();
serverNetworkPressureGraph.addDataset(serverPressureDataset);
chunkMonitorWindow.setCallback(new ImGuiWindowCallback() {
long clientPressureLastValue = 0;
long serverPressureLastValue = 0;
@Override
public void exec() {
//ui framework text
ImGui.text("Chunk Monitor");
Globals.clientDrawCellManager.updateStatus();
ImGui.text("Full res chunks: " + Globals.clientDrawCellManager.getMaxResCount());
// ImGui.text("Garbage queue: " + Globals.clientDrawCellManager.getGarbageSize());
//client network pressure
if(Globals.clientConnection != null){
long clientPressureNewTotal = Globals.clientConnection.getNumBytesRead();
long clientPressureDelta = clientPressureNewTotal - clientPressureLastValue;
clientPressureDataset.addPoint(clientPressureDelta);
clientPressureLastValue = clientPressureNewTotal;
}
clientNetworkBandwith.draw();
//server network pressure
if(Globals.server != null && Globals.server.getFirstConnection() != null){
long serverPressureNewTotal = Globals.server.getFirstConnection().getNumBytesRead();
long serverPressureDelta = serverPressureNewTotal - serverPressureLastValue;
serverPressureDataset.addPoint(serverPressureDelta);
serverPressureLastValue = serverPressureNewTotal;
}
serverNetworkPressureGraph.draw();
}
});
chunkMonitorWindow.setOpen(false);

View File

@ -0,0 +1,78 @@
package electrosphere.client.ui.menu.debug;
import electrosphere.engine.Globals;
import electrosphere.renderer.ui.imgui.ImGuiLinePlot;
import electrosphere.renderer.ui.imgui.ImGuiLinePlot.ImGuiLinePlotDataset;
import electrosphere.renderer.ui.imgui.ImGuiWindow;
import electrosphere.renderer.ui.imgui.ImGuiWindow.ImGuiWindowCallback;
public class ImGuiNetworkMonitor {
/**
* Num datapoints
*/
public static final int PRESSURE_GRAPH_POINT_COUNT = 100;
/**
* Window for viewing chunk status on server and client
*/
protected static ImGuiWindow netMonitorWindow;
/**
* Creates the windows in this file
*/
protected static void createNetworkMonitorWindows(){
createNetworkMonitorWindow();
}
/**
* Client scene entity view
*/
protected static void createNetworkMonitorWindow(){
netMonitorWindow = new ImGuiWindow("Network Monitor");
//client network pressure graph
ImGuiLinePlot clientNetworkBandwith = new ImGuiLinePlot("Client Network Pressure",400,400);
ImGuiLinePlotDataset clientPressureDataset = new ImGuiLinePlotDataset("Client bytes per frame", PRESSURE_GRAPH_POINT_COUNT);
clientPressureDataset.zeroOut();
clientNetworkBandwith.addDataset(clientPressureDataset);
//server network pressure graph
ImGuiLinePlot serverNetworkPressureGraph = new ImGuiLinePlot("Server Network Pressure",400,400);
ImGuiLinePlotDataset serverPressureDataset = new ImGuiLinePlotDataset("Server bytes per frame", PRESSURE_GRAPH_POINT_COUNT);
serverPressureDataset.zeroOut();
serverNetworkPressureGraph.addDataset(serverPressureDataset);
netMonitorWindow.setCallback(new ImGuiWindowCallback() {
long clientPressureLastValue = 0;
long serverPressureLastValue = 0;
@Override
public void exec() {
//client network pressure
if(Globals.clientConnection != null){
long clientPressureNewTotal = Globals.clientConnection.getNumBytesRead();
long clientPressureDelta = clientPressureNewTotal - clientPressureLastValue;
clientPressureDataset.addPoint(clientPressureDelta);
clientPressureLastValue = clientPressureNewTotal;
}
clientNetworkBandwith.draw();
//server network pressure
if(Globals.server != null && Globals.server.getFirstConnection() != null){
long serverPressureNewTotal = Globals.server.getFirstConnection().getNumBytesRead();
long serverPressureDelta = serverPressureNewTotal - serverPressureLastValue;
serverPressureDataset.addPoint(serverPressureDelta);
serverPressureLastValue = serverPressureNewTotal;
}
serverNetworkPressureGraph.draw();
}
});
netMonitorWindow.setOpen(false);
Globals.renderingEngine.getImGuiPipeline().addImGuiWindow(netMonitorWindow);
}
}

View File

@ -52,6 +52,7 @@ public class ImGuiWindowMacros {
ImGuiRenderer.createRendererWindows();
ImGuiTestGen.createTestGenWindows();
ImGuiChunkMonitor.createChunkMonitorWindows();
ImGuiNetworkMonitor.createNetworkMonitorWindows();
ImGuiGriddedManager.createGriddedManagerWindows();
ImGuiMemory.createMemoryWindows();
}
@ -199,6 +200,9 @@ public class ImGuiWindowMacros {
if(ImGui.button("Memory Usage")){
ImGuiMemory.memoryWindow.setOpen(!ImGuiMemory.memoryWindow.isOpen());
}
if(ImGui.button("Network Monitor")){
ImGuiNetworkMonitor.netMonitorWindow.setOpen(true);
}
//close button
if(ImGui.button("Close")){
mainDebugWindow.setOpen(false);