using System.Collections; using System.Collections.Generic; using UnityEngine; using System.Diagnostics; namespace MoreMountains.Tools { /// <summary> /// A struct to store data associated to speed tests /// </summary> public struct MMSpeedTestItem { /// the name of the test, has to be unique public string TestID; /// a stopwatch to compute time public Stopwatch Timer; /// <summary> /// Creates a speed test with the specified ID and starts the timer /// </summary> /// <param name="testID"></param> public MMSpeedTestItem(string testID) { TestID = testID; Timer = Stopwatch.StartNew(); } } /// <summary> /// Use this class to run performance tests in your code. /// It'll output the time spent between the StartTest and the EndTest calls /// Make sure to use a unique ID for both calls /// </summary> public static class MMSpeedTest { private static readonly Dictionary<string, MMSpeedTestItem> _speedTests = new Dictionary<string, MMSpeedTestItem>(); /// <summary> /// Starts a speed test of the specified ID /// </summary> /// <param name="testID"></param> public static void StartTest(string testID) { if (_speedTests.ContainsKey(testID)) { _speedTests.Remove(testID); } MMSpeedTestItem item = new MMSpeedTestItem(testID); _speedTests.Add(testID, item); } /// <summary> /// Stops a speed test of the specified ID /// </summary> public static void EndTest(string testID) { if (!_speedTests.ContainsKey(testID)) { return; } _speedTests[testID].Timer.Stop(); float elapsedTime = _speedTests[testID].Timer.ElapsedMilliseconds / 1000f; _speedTests.Remove(testID); UnityEngine.Debug.Log("<color=red>MMSpeedTest</color> [Test "+testID+"] test duration : "+elapsedTime+"s"); } } }