using System; using System.Collections.Generic; using System.Diagnostics; using FlaxEngine; using FlaxEngine.GUI; namespace Cabrito { [ExecuteInEditMode] public class FpsScript : Script { public UIControl control; Label label; Stopwatch sw; double updateTimeAvg = 0.0; ulong updateTimeCount; const double updateInterval = 0.25; Stopwatch sw2; double drawTimeAvg = 0.0; ulong drawTimeCount; const double drawInterval = 0.25; string currentRenderer = "Unknown"; RenderTask t; public override void OnAwake() { label = (Label)control.Control; sw = Stopwatch.StartNew(); currentRenderer = GPUDevice.Instance.RendererType.ToString(); sw2 = Stopwatch.StartNew(); if (t == null) { //Destroy(t); t = new RenderTask(); t.Render += OnDraw; } } public override void OnDestroy() { Destroy(t); t = null; } double conTime = 0.0; public override void OnUpdate() { updateTimeCount++; double elapsed = sw.Elapsed.TotalSeconds; if (elapsed >= updateInterval) { sw.Restart(); updateTimeAvg = elapsed / updateTimeCount; updateTimeCount = 0; conTime = ((ConsoleContentTextBox.accumDrawTime / ConsoleContentTextBox.accumDrawTimes) * 1000.0); ConsoleContentTextBox.accumDrawTime = 0.0; ConsoleContentTextBox.accumDrawTimes = 0; } ((Label)control.Control).Text = "FPS: " + ((int)Math.Round(1.0f / updateTimeAvg)).ToString(); label.Text += "\nrFPS: " + ((int)Math.Round(1.0f / drawTimeAvg)).ToString(); label.Text += "\nCon: " + conTime.ToString() + "ms"; label.Text += "\n" + currentRenderer; label.Text += "\nGC memory: " + (GC.GetTotalMemory(false)/1000000.0f).ToString() + "MB"; } void OnDraw(RenderTask tt, GPUContext context) { drawTimeCount++; double elapsed = sw2.Elapsed.TotalSeconds; if (elapsed >= drawInterval) { sw2.Restart(); drawTimeAvg = elapsed / drawTimeCount; drawTimeCount = 0; } } } }