107 lines
2.6 KiB
C#
107 lines
2.6 KiB
C#
using System;
|
|
using System.Diagnostics;
|
|
using System.Text;
|
|
using FlaxEngine;
|
|
using FlaxEngine.GUI;
|
|
|
|
namespace Game;
|
|
|
|
[ExecuteInEditMode]
|
|
public class PerformanceWidget : Script
|
|
{
|
|
private const double updateInterval = 0.2;
|
|
|
|
public UIControl control;
|
|
private Label label;
|
|
|
|
private Stopwatch stopwatch;
|
|
private Stopwatch stopwatch2;
|
|
|
|
private double updateTimeAvg;
|
|
private double updateTimeAvg2;
|
|
private ulong updateTimeCount;
|
|
private ulong updateTimeCount2;
|
|
|
|
public override void OnAwake()
|
|
{
|
|
label = (Label)control.Control;
|
|
label.Text = $"0fps";
|
|
control.HideFlags = HideFlags.None;
|
|
|
|
stopwatch = Stopwatch.StartNew();
|
|
stopwatch2 = Stopwatch.StartNew();
|
|
}
|
|
|
|
public override void OnUpdate()
|
|
{
|
|
updateTimeCount2++;
|
|
double elapsed2 = stopwatch2.Elapsed.TotalSeconds;
|
|
if (elapsed2 >= updateInterval * 10)
|
|
{
|
|
stopwatch2.Restart();
|
|
updateTimeAvg2 = elapsed2 / updateTimeCount2;
|
|
updateTimeCount2 = 0;
|
|
}
|
|
|
|
updateTimeCount++;
|
|
double elapsed = stopwatch.Elapsed.TotalSeconds;
|
|
if (elapsed >= updateInterval)
|
|
{
|
|
stopwatch.Restart();
|
|
updateTimeAvg = elapsed / updateTimeCount;
|
|
updateTimeCount = 0;
|
|
|
|
StringBuilder text = new StringBuilder(10);
|
|
|
|
#if true
|
|
long triangles = 0;
|
|
long drawCalls = 0;
|
|
|
|
#if BUILD_DEBUG || BUILD_DEVELOPMENT
|
|
var gpuEvents = ProfilingTools.EventsGPU;
|
|
if (gpuEvents.Length > 0)
|
|
{
|
|
triangles = gpuEvents[0].Stats.Triangles;
|
|
drawCalls = gpuEvents[0].Stats.DrawCalls;
|
|
}
|
|
#endif
|
|
|
|
text.AppendLine($"{triangles} tris\n {drawCalls} drawcalls");
|
|
text.AppendLine($"{(int)Math.Round(1.0f / updateTimeAvg2)}fps2");
|
|
#endif
|
|
text.Append($"{(int)Math.Round(1.0f / updateTimeAvg)}fps");
|
|
|
|
label.Text = text.ToString();
|
|
}
|
|
|
|
#if false
|
|
#if BUILD_DEVELOPMENT
|
|
var nameOffset = Marshal.OffsetOf(typeof(ProfilerCPU.Event), "Name0");
|
|
foreach (var eventsCpu in FlaxEngine.ProfilingTools.EventsCPU)
|
|
{
|
|
sb.Append("\nName: " + eventsCpu.Name + " ");
|
|
foreach (var eventt in eventsCpu.Events)
|
|
{
|
|
#if FLAX_EDITOR
|
|
string eventName = eventt.Name;
|
|
#else
|
|
string eventName;
|
|
unsafe
|
|
{
|
|
var ptr1 = &eventt;
|
|
char* ptr2 = (char*)(new IntPtr((byte*)ptr1 + nameOffset.ToInt64()));
|
|
//fixed (char* name = &eventt)
|
|
{
|
|
eventName = new string(ptr2);
|
|
}
|
|
}
|
|
#endif
|
|
|
|
sb.Append(eventName + " " + (eventt.End-eventt.Start) + "ms, ");
|
|
}
|
|
|
|
}
|
|
#endif
|
|
#endif
|
|
}
|
|
} |