From 8f4bd81fd4eaa62f917bb76545909dca9a5ad51f Mon Sep 17 00:00:00 2001 From: Emanuel Rabina Date: Thu, 26 Dec 2024 23:49:41 +1300 Subject: [PATCH] Add more debug/usage stats --- .../ultraq/redhorizon/classic/maps/Map.groovy | 12 ++++++++++ .../engine/graphics/imgui/DebugOverlay.groovy | 23 ++++++++++++++----- 2 files changed, 29 insertions(+), 6 deletions(-) diff --git a/redhorizon-classic/source/nz/net/ultraq/redhorizon/classic/maps/Map.groovy b/redhorizon-classic/source/nz/net/ultraq/redhorizon/classic/maps/Map.groovy index d17581e4..c50511a0 100644 --- a/redhorizon-classic/source/nz/net/ultraq/redhorizon/classic/maps/Map.groovy +++ b/redhorizon-classic/source/nz/net/ultraq/redhorizon/classic/maps/Map.groovy @@ -520,6 +520,12 @@ class Map extends Node { addChild(terrain) } } + + @Override + String getName() { + + return "Terrain - ${children.size()} objects" + } } /** @@ -559,6 +565,12 @@ class Map extends Node { heading = objectLine.heading } } + + @Override + String getName() { + + return "${this.class.simpleName} - ${children.size()} units" + } } /** diff --git a/redhorizon-engine/source/nz/net/ultraq/redhorizon/engine/graphics/imgui/DebugOverlay.groovy b/redhorizon-engine/source/nz/net/ultraq/redhorizon/engine/graphics/imgui/DebugOverlay.groovy index 3cd3cad6..2510d9ac 100644 --- a/redhorizon-engine/source/nz/net/ultraq/redhorizon/engine/graphics/imgui/DebugOverlay.groovy +++ b/redhorizon-engine/source/nz/net/ultraq/redhorizon/engine/graphics/imgui/DebugOverlay.groovy @@ -27,6 +27,10 @@ import imgui.type.ImBoolean import static imgui.flag.ImGuiWindowFlags.* import static org.lwjgl.glfw.GLFW.* +import java.lang.management.ManagementFactory +import java.util.concurrent.Executors +import java.util.concurrent.TimeUnit + /** * An overlay rendering pass for displaying debug information about the game. * @@ -39,11 +43,14 @@ class DebugOverlay implements ImGuiElement, Switch { private int debugWindowSizeX = 350 private int debugWindowSizeY = 200 private final EngineStats engineStats + private final Runtime runtime private float leftX private float leftY private float rightX private float rightY + private float memoryUsage + private long garbageCollections /** * Constructor, create a new blank overlay. This is made more useful by @@ -58,6 +65,7 @@ class DebugOverlay implements ImGuiElement, Switch { } } engineStats = EngineStats.instance + runtime = Runtime.runtime inputEventStream.on(GamepadAxisEvent) { event -> switch (event.type) { @@ -69,6 +77,11 @@ class DebugOverlay implements ImGuiElement, Switch { } this.enabled = enabled + + Executors.newScheduledThreadPool(1).scheduleAtFixedRate({ -> + memoryUsage = ((runtime.totalMemory() - runtime.freeMemory()) / 1024) / 1024 + garbageCollections = ManagementFactory.garbageCollectorMXBeans.inject(0L) { acc, bean -> acc + bean.collectionCount } + }, 1, 1, TimeUnit.SECONDS) } @Override @@ -84,14 +97,12 @@ class DebugOverlay implements ImGuiElement, Switch { debugWindowSizeY = ImGui.getWindowSizeY() as int ImGui.text("Framerate: ${sprintf('%.1f', ImGui.getIO().framerate)}fps, Frametime: ${sprintf('%.1f', 1000 / ImGui.getIO().framerate)}ms") + ImGui.text("Memory used: ${String.format('%.2f', memoryUsage)}MB, GCs: ${garbageCollections}") ImGui.text("Scene objects: ${engineStats.sceneObjects.get()}") ImGui.text("Draw calls: ${engineStats.drawCalls.getAndSet(0)}") - ImGui.text("Active meshes: ${engineStats.activeMeshes}") - ImGui.text("Active textures: ${engineStats.activeTextures}") - ImGui.text("Active framebuffers: ${engineStats.activeFramebuffers}") - ImGui.text("Active uniform buffers: ${engineStats.activeUniformBuffers}") - ImGui.text("Active sources: ${engineStats.activeSources}") - ImGui.text("Active buffers: ${engineStats.activeBuffers}") + ImGui.text("Graphics meshes: ${engineStats.activeMeshes}, textures: ${engineStats.activeTextures}") + ImGui.text("Graphics framebuffers: ${engineStats.activeFramebuffers}, uniform buffers: ${engineStats.activeUniformBuffers}") + ImGui.text("Sound sources: ${engineStats.activeSources}, buffers: ${engineStats.activeBuffers}") ImGui.text("Gamepad sticks: " + "(${sprintf('%.2f', leftX)}, ${sprintf('%.2f', leftY)}) " + "(${sprintf('%.2f', rightX)}, ${sprintf('%.2f', rightY)})")