using System; using System.Diagnostics; using FlaxEngine; using FlaxEngine.GUI; namespace Game { [ExecuteInEditMode] public class PerformanceWidget : Script { private const double updateInterval = 0.25; public UIControl control; private Label label; private Stopwatch stopwatch; private double updateTimeAvg; private ulong updateTimeCount; public override void OnAwake() { label = (Label)control.Control; label.Text = $"0fps"; control.HideFlags = HideFlags.None; stopwatch = Stopwatch.StartNew(); } public override void OnUpdate() { updateTimeCount++; double elapsed = stopwatch.Elapsed.TotalSeconds; if (elapsed >= updateInterval) { stopwatch.Restart(); updateTimeAvg = elapsed / updateTimeCount; updateTimeCount = 0; label.Text = $"{(int)Math.Round(1.0f / updateTimeAvg)}fps"; } #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 } } }