From fcd4fa607f8e6a07738914a5215e9b3ab44c8a05 Mon Sep 17 00:00:00 2001 From: Collin Smith Date: Thu, 11 Jun 2020 01:19:49 -0700 Subject: [PATCH] Created metrics for tracking CPU and GPU time Rewrote artemis-odb-contrib/contrib-plugin-profiler Profiler was too restrictive and privated many useful fields and had static methods, yuk Profiler plugin will always run and the key will only hide the UI (and set it as GPU system) Profiler plugin will maybe be modified in the future to be more extensible Extended profiler plugin to support tagging systems as GPU systems I'd like to know which systems are slow and track CPU/GPU bottlenecks on mobile --- core/src/com/riiablo/Client.java | 2 + core/src/com/riiablo/Metrics.java | 2 + .../riiablo/engine/client/LabelManager.java | 4 + .../engine/client/MonsterLabelManager.java | 4 + .../engine/client/debug/Box2DDebugger.java | 4 + .../engine/client/debug/PathDebugger.java | 4 + .../engine/client/debug/PathfindDebugger.java | 4 + .../client/debug/RenderSystemDebugger.java | 4 + core/src/com/riiablo/map/RenderSystem.java | 13 +- core/src/com/riiablo/profiler/GpuSystem.java | 10 + .../profiler/ProfilerInvocationStrategy.java | 83 ++++ .../com/riiablo/profiler/ProfilerPlugin.java | 26 ++ .../com/riiablo/profiler/ProfilerSystem.java | 145 +++++++ .../com/riiablo/profiler/SystemProfiler.java | 374 ++++++++++++++++ .../riiablo/profiler/SystemProfilerGUI.java | 405 ++++++++++++++++++ core/src/com/riiablo/screen/GameScreen.java | 7 +- 16 files changed, 1083 insertions(+), 8 deletions(-) create mode 100644 core/src/com/riiablo/profiler/GpuSystem.java create mode 100644 core/src/com/riiablo/profiler/ProfilerInvocationStrategy.java create mode 100644 core/src/com/riiablo/profiler/ProfilerPlugin.java create mode 100644 core/src/com/riiablo/profiler/ProfilerSystem.java create mode 100644 core/src/com/riiablo/profiler/SystemProfiler.java create mode 100644 core/src/com/riiablo/profiler/SystemProfilerGUI.java diff --git a/core/src/com/riiablo/Client.java b/core/src/com/riiablo/Client.java index 2470a262..fe208fe5 100644 --- a/core/src/com/riiablo/Client.java +++ b/core/src/com/riiablo/Client.java @@ -449,6 +449,8 @@ public class Client extends Game { .append(Gdx.graphics.getFramesPerSecond()) .append('\n').append("Ping: ").append(Riiablo.metrics.ping).append(" ms") .append('\n').append("RTT: ").append(Riiablo.metrics.rtt).append(" ms") + .append('\n').append(String.format("CPU: %.1f ms", Riiablo.metrics.cpu)) + .append('\n').append(String.format("GPU: %.1f ms", Riiablo.metrics.gpu)) ; fps.setText(font, builder.toString()); int drawFpsMethod = this.drawFpsMethod; diff --git a/core/src/com/riiablo/Metrics.java b/core/src/com/riiablo/Metrics.java index 9703b0f8..aa77a9e8 100644 --- a/core/src/com/riiablo/Metrics.java +++ b/core/src/com/riiablo/Metrics.java @@ -1,6 +1,8 @@ package com.riiablo; public class Metrics { + public float cpu; + public float gpu; public long ping; public long rtt; diff --git a/core/src/com/riiablo/engine/client/LabelManager.java b/core/src/com/riiablo/engine/client/LabelManager.java index 84375f04..e96a894c 100644 --- a/core/src/com/riiablo/engine/client/LabelManager.java +++ b/core/src/com/riiablo/engine/client/LabelManager.java @@ -4,18 +4,22 @@ import com.artemis.ComponentMapper; import com.artemis.annotations.All; import com.artemis.annotations.Wire; import com.artemis.systems.IteratingSystem; + import com.badlogic.gdx.math.MathUtils; import com.badlogic.gdx.math.Vector2; import com.badlogic.gdx.scenes.scene2d.Actor; import com.badlogic.gdx.utils.Align; import com.badlogic.gdx.utils.Array; + import com.riiablo.Riiablo; import com.riiablo.camera.IsometricCamera; import com.riiablo.engine.client.component.Hovered; import com.riiablo.engine.client.component.Label; import com.riiablo.engine.server.component.Position; import com.riiablo.map.RenderSystem; +import com.riiablo.profiler.GpuSystem; +@GpuSystem @All({Hovered.class, Label.class, Position.class}) public class LabelManager extends IteratingSystem { protected ComponentMapper