123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- using System;
- #if HIERARCHY_PROFILING
- using System.Diagnostics;
- using System.Text;
- using UnityEngine.Profiling;
- #endif
- using 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
- }
- }
- }
|