ProfilerSample.cs 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. using System;
  2. #if HIERARCHY_PROFILING
  3. using System.Diagnostics;
  4. using System.Text;
  5. using UnityEngine.Profiling;
  6. #endif
  7. using Object = UnityEngine.Object;
  8. namespace EnhancedHierarchy {
  9. /// <summary>
  10. /// Prevents wrong profiler samples count.
  11. /// Very useful for things other than Enhanced Hierarchy, Unity could implement this on its API, just saying :).
  12. /// </summary>
  13. public sealed class ProfilerSample : IDisposable {
  14. #if HIERARCHY_PROFILING
  15. private static readonly StringBuilder name = new StringBuilder(150);
  16. #endif
  17. private ProfilerSample(string name, Object targetObject) {
  18. #if HIERARCHY_PROFILING
  19. if (!targetObject)
  20. Profiler.BeginSample(name);
  21. else
  22. Profiler.BeginSample(name, targetObject);
  23. #endif
  24. }
  25. public static ProfilerSample Get() {
  26. #if HIERARCHY_PROFILING
  27. Profiler.BeginSample("Getting Stack Frame");
  28. var stack = new StackFrame(1, false);
  29. name.Length = 0;
  30. name.Append(stack.GetMethod().DeclaringType.Name);
  31. name.Append(".");
  32. name.Append(stack.GetMethod().Name);
  33. Profiler.EndSample();
  34. return Get(name.ToString(), null);
  35. #else
  36. return null;
  37. #endif
  38. }
  39. public static ProfilerSample Get(string name, Object targetObject = null) {
  40. #if HIERARCHY_PROFILING
  41. return new ProfilerSample(name, targetObject);
  42. #else
  43. return null;
  44. #endif
  45. }
  46. public void Dispose() {
  47. #if HIERARCHY_PROFILING
  48. Profiler.EndSample();
  49. #endif
  50. }
  51. }
  52. }