| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 | using System;#if HIERARCHY_PROFILINGusing System.Diagnostics;using System.Text;using UnityEngine.Profiling;#endifusing Object = UnityEngine.Object;namespace EnhancedHierarchy {    /// <summary>    /// Prevents wrong profiler samples count.    /// Very useful for things other than Enhanced Hierarchy, Unity could implement this on its API, just saying :).    /// </summary>    public sealed class ProfilerSample : IDisposable {        #if HIERARCHY_PROFILING        private static readonly StringBuilder name = new StringBuilder(150);        #endif        private ProfilerSample(string name, Object targetObject) {            #if HIERARCHY_PROFILING            if (!targetObject)                Profiler.BeginSample(name);            else                Profiler.BeginSample(name, targetObject);            #endif        }        public static ProfilerSample Get() {            #if HIERARCHY_PROFILING            Profiler.BeginSample("Getting Stack Frame");            var stack = new StackFrame(1, false);            name.Length = 0;            name.Append(stack.GetMethod().DeclaringType.Name);            name.Append(".");            name.Append(stack.GetMethod().Name);            Profiler.EndSample();            return Get(name.ToString(), null);            #else            return null;            #endif        }        public static ProfilerSample Get(string name, Object targetObject = null) {            #if HIERARCHY_PROFILING            return new ProfilerSample(name, targetObject);            #else            return null;            #endif        }        public void Dispose() {            #if HIERARCHY_PROFILING            Profiler.EndSample();            #endif        }    }}
 |