DebuggerComponent.ReferencePoolInformationWindow.cs 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. //------------------------------------------------------------
  2. // Game Framework
  3. // Copyright © 2013-2021 loyalsoft. All rights reserved.
  4. // Homepage: http://www.game7000.com/
  5. // Feedback: http://www.game7000.com/
  6. //------------------------------------------------------------
  7. using GameFramework;
  8. using System;
  9. using System.Collections.Generic;
  10. using UnityEngine;
  11. namespace UnityGameFramework.Runtime
  12. {
  13. public sealed partial class DebuggerComponent : GameFrameworkComponent
  14. {
  15. private sealed class ReferencePoolInformationWindow : ScrollableDebuggerWindowBase
  16. {
  17. private readonly Dictionary<string, List<ReferencePoolInfo>> m_ReferencePoolInfos = new Dictionary<string, List<ReferencePoolInfo>>(StringComparer.Ordinal);
  18. private readonly Comparison<ReferencePoolInfo> m_NormalClassNameComparer = NormalClassNameComparer;
  19. private readonly Comparison<ReferencePoolInfo> m_FullClassNameComparer = FullClassNameComparer;
  20. private bool m_ShowFullClassName = false;
  21. public override void Initialize(params object[] args)
  22. {
  23. }
  24. protected override void OnDrawScrollableWindow()
  25. {
  26. GUILayout.Label("<b>Reference Pool Information</b>");
  27. GUILayout.BeginVertical("box");
  28. {
  29. DrawItem("Enable Strict Check", ReferencePool.EnableStrictCheck.ToString());
  30. DrawItem("Reference Pool Count", ReferencePool.Count.ToString());
  31. }
  32. GUILayout.EndVertical();
  33. m_ShowFullClassName = GUILayout.Toggle(m_ShowFullClassName, "Show Full Class Name");
  34. m_ReferencePoolInfos.Clear();
  35. ReferencePoolInfo[] referencePoolInfos = ReferencePool.GetAllReferencePoolInfos();
  36. foreach (ReferencePoolInfo referencePoolInfo in referencePoolInfos)
  37. {
  38. string assemblyName = referencePoolInfo.Type.Assembly.GetName().Name;
  39. List<ReferencePoolInfo> results = null;
  40. if (!m_ReferencePoolInfos.TryGetValue(assemblyName, out results))
  41. {
  42. results = new List<ReferencePoolInfo>();
  43. m_ReferencePoolInfos.Add(assemblyName, results);
  44. }
  45. results.Add(referencePoolInfo);
  46. }
  47. foreach (KeyValuePair<string, List<ReferencePoolInfo>> assemblyReferencePoolInfo in m_ReferencePoolInfos)
  48. {
  49. GUILayout.Label(Utility.Text.Format("<b>Assembly: {0}</b>", assemblyReferencePoolInfo.Key));
  50. GUILayout.BeginVertical("box");
  51. {
  52. GUILayout.BeginHorizontal();
  53. {
  54. GUILayout.Label(m_ShowFullClassName ? "<b>Full Class Name</b>" : "<b>Class Name</b>");
  55. GUILayout.Label("<b>Unused</b>", GUILayout.Width(60f));
  56. GUILayout.Label("<b>Using</b>", GUILayout.Width(60f));
  57. GUILayout.Label("<b>Acquire</b>", GUILayout.Width(60f));
  58. GUILayout.Label("<b>Release</b>", GUILayout.Width(60f));
  59. GUILayout.Label("<b>Add</b>", GUILayout.Width(60f));
  60. GUILayout.Label("<b>Remove</b>", GUILayout.Width(60f));
  61. }
  62. GUILayout.EndHorizontal();
  63. if (assemblyReferencePoolInfo.Value.Count > 0)
  64. {
  65. assemblyReferencePoolInfo.Value.Sort(m_ShowFullClassName ? m_FullClassNameComparer : m_NormalClassNameComparer);
  66. foreach (ReferencePoolInfo referencePoolInfo in assemblyReferencePoolInfo.Value)
  67. {
  68. DrawReferencePoolInfo(referencePoolInfo);
  69. }
  70. }
  71. else
  72. {
  73. GUILayout.Label("<i>Reference Pool is Empty ...</i>");
  74. }
  75. }
  76. GUILayout.EndVertical();
  77. }
  78. }
  79. private void DrawReferencePoolInfo(ReferencePoolInfo referencePoolInfo)
  80. {
  81. GUILayout.BeginHorizontal();
  82. {
  83. GUILayout.Label(m_ShowFullClassName ? referencePoolInfo.Type.FullName : referencePoolInfo.Type.Name);
  84. GUILayout.Label(referencePoolInfo.UnusedReferenceCount.ToString(), GUILayout.Width(60f));
  85. GUILayout.Label(referencePoolInfo.UsingReferenceCount.ToString(), GUILayout.Width(60f));
  86. GUILayout.Label(referencePoolInfo.AcquireReferenceCount.ToString(), GUILayout.Width(60f));
  87. GUILayout.Label(referencePoolInfo.ReleaseReferenceCount.ToString(), GUILayout.Width(60f));
  88. GUILayout.Label(referencePoolInfo.AddReferenceCount.ToString(), GUILayout.Width(60f));
  89. GUILayout.Label(referencePoolInfo.RemoveReferenceCount.ToString(), GUILayout.Width(60f));
  90. }
  91. GUILayout.EndHorizontal();
  92. }
  93. private static int NormalClassNameComparer(ReferencePoolInfo a, ReferencePoolInfo b)
  94. {
  95. return a.Type.Name.CompareTo(b.Type.Name);
  96. }
  97. private static int FullClassNameComparer(ReferencePoolInfo a, ReferencePoolInfo b)
  98. {
  99. return a.Type.FullName.CompareTo(b.Type.FullName);
  100. }
  101. }
  102. }
  103. }