diff --git a/Core/RenderManager.cs b/Core/RenderManager.cs index 2a2f4a0..b6c7d7c 100644 --- a/Core/RenderManager.cs +++ b/Core/RenderManager.cs @@ -26,6 +26,9 @@ namespace ADOFAIRenderer.Core public const int MaxQueuedFrames = 64; public const int MaxRenderRetry = 64; + + // Statistics + public long framesSent; // Core Render Configuration and Path public int countdown; @@ -382,6 +385,7 @@ namespace ADOFAIRenderer.Core } frameCount = 0; + framesSent = 0; timeBase = Time.timeAsDouble; unscaledTimeBase = Time.unscaledTimeAsDouble; dspTimeBase = AudioSettings.dspTime; @@ -507,12 +511,15 @@ namespace ADOFAIRenderer.Core if (frame.ManagedBuffer.Length > 0) { videoFFmpeg.SendDataFromBuffer(frame.ManagedBuffer, frame.Length); + Interlocked.Increment(ref framesSent); + ArrayPool.Shared.Return(frame.ManagedBuffer); } } else if (frame.NativePointer != IntPtr.Zero && frame.Length > 0) { videoFFmpeg.SendDataFromNativeBuffer(frame.NativePointer, frame.Length); + Interlocked.Increment(ref framesSent); if (frame.ReadbackState != null) { diff --git a/UI/DebugMonitorUI.cs b/UI/DebugMonitorUI.cs index 20849cf..ec01f41 100644 --- a/UI/DebugMonitorUI.cs +++ b/UI/DebugMonitorUI.cs @@ -1,5 +1,6 @@ using System; using System.Text; +using System.Threading; using ADOFAIRenderer.Core; using TMPro; using UnityEngine; @@ -94,7 +95,7 @@ namespace ADOFAIRenderer.UI panelRect.anchorMax = new Vector2(1, 1); panelRect.pivot = new Vector2(1, 1); panelRect.anchoredPosition = new Vector2(-30, -30); - panelRect.sizeDelta = new Vector2(340, 250); + panelRect.sizeDelta = new Vector2(360, 220); // 텍스트 생성 var textObj = new GameObject("MonitorText"); @@ -187,8 +188,7 @@ namespace ADOFAIRenderer.UI var sb = new StringBuilder(); sb.AppendLine("ADOFAI Renderer Realtime Monitor"); sb.AppendLine(); - sb.AppendLine($"• Rendered Progress: {(RenderManager.Instance ? RenderManager.Instance.frameCount : 0)} frames"); - + var queueCount = 0; if (RenderManager.Instance) { @@ -197,7 +197,10 @@ namespace ADOFAIRenderer.UI queueCount = RenderManager.Instance.ImageQueue.Count; } } - sb.AppendLine($"• Queued Buffers: {queueCount} / {RenderManager.MaxQueuedFrames} frames"); + + sb.AppendLine($"• Queue: {queueCount} / {RenderManager.MaxQueuedFrames} frames"); + sb.AppendLine($"• Rendered Frames: {(RenderManager.Instance ? RenderManager.Instance.frameCount : 0)}"); + sb.AppendLine($"• Frames Sent: {(RenderManager.Instance ? Interlocked.Read(ref RenderManager.Instance.framesSent) : 0)}"); sb.AppendLine(); sb.AppendLine($"• Throttling Controls: {(RenderManager.Instance ? RenderManager.Instance.throttleCount : 0)} times");