public override void OnInspectorGUI() { base.OnInspectorGUI(); if (!EditorApplication.isPlaying) { EditorGUILayout.HelpBox("Available during runtime only.", MessageType.Info); return; } ReferencePoolComponent t = (ReferencePoolComponent)target; if (IsPrefabInHierarchy(t.gameObject)) { EditorGUILayout.LabelField("Reference Pool Count", ReferencePool.Count.ToString()); ReferencePoolInfo[] referencePoolInfos = ReferencePool.GetAllReferencePoolInfos(); foreach (ReferencePoolInfo referencePoolInfo in referencePoolInfos) { DrawReferencePoolInfo(referencePoolInfo); } } Repaint(); }
protected override void OnDrawScrollableWindow() { GUILayout.Label("<b>Reference Pool Information</b>"); GUILayout.BeginVertical("box"); { DrawItem("Enable Strict Check", ReferencePool.EnableStrictCheck.ToString()); DrawItem("Reference Pool Count", ReferencePool.Count.ToString()); } GUILayout.EndVertical(); m_ShowFullClassName = GUILayout.Toggle(m_ShowFullClassName, "Show Full Class Name"); m_ReferencePoolInfos.Clear(); ReferencePoolInfo[] referencePoolInfos = ReferencePool.GetAllReferencePoolInfos(); foreach (ReferencePoolInfo referencePoolInfo in referencePoolInfos) { string assemblyName = referencePoolInfo.Type.Assembly.GetName().Name; List <ReferencePoolInfo> results = null; if (!m_ReferencePoolInfos.TryGetValue(assemblyName, out results)) { results = new List <ReferencePoolInfo>(); m_ReferencePoolInfos.Add(assemblyName, results); } results.Add(referencePoolInfo); } foreach (KeyValuePair <string, List <ReferencePoolInfo> > assemblyReferencePoolInfo in m_ReferencePoolInfos) { GUILayout.Label(Utility.Text.Format("<b>Assembly: {0}</b>", assemblyReferencePoolInfo.Key)); GUILayout.BeginVertical("box"); { GUILayout.BeginHorizontal(); { GUILayout.Label(m_ShowFullClassName ? "<b>Full Class Name</b>" : "<b>Class Name</b>"); GUILayout.Label("<b>Unused</b>", GUILayout.Width(60f)); GUILayout.Label("<b>Using</b>", GUILayout.Width(60f)); GUILayout.Label("<b>Acquire</b>", GUILayout.Width(60f)); GUILayout.Label("<b>Release</b>", GUILayout.Width(60f)); GUILayout.Label("<b>Add</b>", GUILayout.Width(60f)); GUILayout.Label("<b>Remove</b>", GUILayout.Width(60f)); } GUILayout.EndHorizontal(); if (assemblyReferencePoolInfo.Value.Count > 0) { assemblyReferencePoolInfo.Value.Sort(Comparison); foreach (ReferencePoolInfo referencePoolInfo in assemblyReferencePoolInfo.Value) { DrawReferencePoolInfo(referencePoolInfo); } } else { GUILayout.Label("<i>Reference Pool is Empty ...</i>"); } } GUILayout.EndVertical(); } }
/// <summary> /// 获取所有引用池的信息 /// </summary> /// <returns>所有引用池的信息</returns> public ReferencePoolInfo[] GetAllReferencePoolInfos() { return(ReferencePool.GetAllReferencePoolInfos()); }
public override void OnInspectorGUI() { base.OnInspectorGUI(); serializedObject.Update(); ReferencePoolComponent t = (ReferencePoolComponent)target; if (EditorApplication.isPlaying && IsPrefabInHierarchy(t.gameObject)) { bool enableStrictCheck = EditorGUILayout.Toggle("Enable Strict Check", t.EnableStrictCheck); if (enableStrictCheck != t.EnableStrictCheck) { t.EnableStrictCheck = enableStrictCheck; } EditorGUILayout.LabelField("Reference Pool Count", ReferencePool.Count.ToString()); m_ShowFullClassName = EditorGUILayout.Toggle("Show Full Class Name", m_ShowFullClassName); m_ReferencePoolInfos.Clear(); ReferencePoolInfo[] referencePoolInfos = ReferencePool.GetAllReferencePoolInfos(); foreach (ReferencePoolInfo referencePoolInfo in referencePoolInfos) { string assemblyName = referencePoolInfo.Type.Assembly.GetName().Name; List <ReferencePoolInfo> results = null; if (!m_ReferencePoolInfos.TryGetValue(assemblyName, out results)) { results = new List <ReferencePoolInfo>(); m_ReferencePoolInfos.Add(assemblyName, results); } results.Add(referencePoolInfo); } foreach (KeyValuePair <string, List <ReferencePoolInfo> > assemblyReferencePoolInfo in m_ReferencePoolInfos) { bool lastState = m_OpenedItems.Contains(assemblyReferencePoolInfo.Key); bool currentState = EditorGUILayout.Foldout(lastState, assemblyReferencePoolInfo.Key); if (currentState != lastState) { if (currentState) { m_OpenedItems.Add(assemblyReferencePoolInfo.Key); } else { m_OpenedItems.Remove(assemblyReferencePoolInfo.Key); } } if (currentState) { EditorGUILayout.BeginVertical("box"); { EditorGUILayout.LabelField(m_ShowFullClassName ? "Full Class Name" : "Class Name", "Unused\tUsing\tAcquire\tRelease\tAdd\tRemove"); assemblyReferencePoolInfo.Value.Sort(Comparison); foreach (ReferencePoolInfo referencePoolInfo in assemblyReferencePoolInfo.Value) { DrawReferencePoolInfo(referencePoolInfo); } if (GUILayout.Button("Export CSV Data")) { string exportFileName = EditorUtility.SaveFilePanel("Export CSV Data", string.Empty, Utility.Text.Format("Reference Pool Data - {0}.csv", assemblyReferencePoolInfo.Key), string.Empty); if (!string.IsNullOrEmpty(exportFileName)) { try { int index = 0; string[] data = new string[assemblyReferencePoolInfo.Value.Count + 1]; data[index++] = "Class Name,Full Class Name,Unused,Using,Acquire,Release,Add,Remove"; foreach (ReferencePoolInfo referencePoolInfo in assemblyReferencePoolInfo.Value) { data[index++] = Utility.Text.Format("{0},{1},{2},{3},{4},{5},{6},{7}", referencePoolInfo.Type.Name, referencePoolInfo.Type.FullName, referencePoolInfo.UnusedReferenceCount.ToString(), referencePoolInfo.UsingReferenceCount.ToString(), referencePoolInfo.AcquireReferenceCount.ToString(), referencePoolInfo.ReleaseReferenceCount.ToString(), referencePoolInfo.AddReferenceCount.ToString(), referencePoolInfo.RemoveReferenceCount.ToString()); } File.WriteAllLines(exportFileName, data, Encoding.UTF8); Debug.Log(Utility.Text.Format("Export reference pool CSV data to '{0}' success.", exportFileName)); } catch (Exception exception) { Debug.LogError(Utility.Text.Format("Export reference pool CSV data to '{0}' failure, exception is '{1}'.", exportFileName, exception.ToString())); } } } } EditorGUILayout.EndVertical(); EditorGUILayout.Separator(); } } } else { EditorGUILayout.PropertyField(m_EnableStrictCheck); } serializedObject.ApplyModifiedProperties(); Repaint(); }
public override void OnInspectorGUI() { base.OnInspectorGUI(); if (!EditorApplication.isPlaying) { EditorGUILayout.HelpBox("Available during runtime only.", MessageType.Info); return; } ReferencePoolComponent t = (ReferencePoolComponent)target; if (IsPrefabInHierarchy(t.gameObject)) { EditorGUILayout.LabelField("Reference Pool Count", ReferencePool.Count.ToString()); m_ShowFullName = EditorGUILayout.Toggle("Show Full Name", m_ShowFullName); m_ReferencePoolInfos.Clear(); ReferencePoolInfo[] referencePoolInfos = ReferencePool.GetAllReferencePoolInfos(); foreach (ReferencePoolInfo referencePoolInfo in referencePoolInfos) { string assemblyName = referencePoolInfo.Type.Assembly.GetName().Name; List <ReferencePoolInfo> results = null; if (!m_ReferencePoolInfos.TryGetValue(assemblyName, out results)) { results = new List <ReferencePoolInfo>(); m_ReferencePoolInfos.Add(assemblyName, results); } results.Add(referencePoolInfo); } foreach (KeyValuePair <string, List <ReferencePoolInfo> > assemblyReferencePoolInfo in m_ReferencePoolInfos) { bool lastState = m_OpenedItems.Contains(assemblyReferencePoolInfo.Key); bool currentState = EditorGUILayout.Foldout(lastState, "Assembly " + assemblyReferencePoolInfo.Key); if (currentState != lastState) { if (currentState) { m_OpenedItems.Add(assemblyReferencePoolInfo.Key); } else { m_OpenedItems.Remove(assemblyReferencePoolInfo.Key); } } if (currentState) { EditorGUILayout.BeginVertical("box"); { assemblyReferencePoolInfo.Value.Sort(Comparison); foreach (ReferencePoolInfo referencePoolInfo in assemblyReferencePoolInfo.Value) { DrawReferencePoolInfo(referencePoolInfo); } } EditorGUILayout.EndVertical(); EditorGUILayout.Separator(); } } } Repaint(); }