void DrawSampleTree(pb_Sample sample, int indent, string key_prefix) { string key = key_prefix + sample.name; int childCount = sample.children.Count; if (!row_visibility.ContainsKey(key)) { row_visibility.Add(key, true); } GUILayout.BeginHorizontal(); GUILayout.BeginHorizontal(GUILayout.MinWidth(name_width), GUILayout.MaxWidth(name_width)); GUILayout.Space(indent * (childCount > 0 ? 10 : 22)); if (childCount > 0) { row_visibility[key] = EditorGUILayout.Foldout(row_visibility[key], sample.name); } else { GUILayout.Label(sample.name); } GUILayout.EndHorizontal(); GUILayout.Label(sample.sampleCount.ToString(), GUILayout.MinWidth(sample_width), GUILayout.MaxWidth(sample_width)); GUILayout.Label(sample.Percentage().ToString("F2"), GUILayout.MinWidth(percent_width), GUILayout.MaxWidth(percent_width)); GUILayout.Label(sample.average.ToString() + " ms", GUILayout.MinWidth(avg_width), GUILayout.MaxWidth(avg_width)); GUILayout.Label(sample.sum.ToString() + " ms", GUILayout.MinWidth(sum_width), GUILayout.MaxWidth(sum_width)); GUILayout.Label(sample.min.ToString() + " ms", GUILayout.MinWidth(range_width), GUILayout.MaxWidth(range_width)); GUILayout.Label(sample.max.ToString() + " ms", GUILayout.MinWidth(range_width), GUILayout.MaxWidth(range_width)); GUILayout.Label(sample.lastSample.ToString() + " ms", GUILayout.MinWidth(range_width), GUILayout.MaxWidth(range_width)); GUILayout.EndHorizontal(); if (row_visibility[key]) { indent++; foreach (pb_Sample child in sample.children) { DrawSampleTree(child, indent, key); } } }
void OnGUI() { // odd_column_color = EditorGUILayout.ColorField("col", odd_column_color); // GUILayout.Label(odd_column_color.r + ", " + odd_column_color.g+ ", " + odd_column_color.b + ", " + odd_column_color.a); // n = EditorGUILayout.IntField("n", n); string[] display = new string[profiles.Count]; int[] values = new int[display.Length]; for (int i = 0; i < values.Length; i++) { display[i] = "Profiler: " + i; values[i] = i; } GUILayout.BeginHorizontal(); EditorGUI.BeginChangeCheck(); view = EditorGUILayout.IntPopup("Profiler", view, display, values); if (EditorGUI.EndChangeCheck()) { row_visibility.Clear(); } // update_gui = EditorGUILayout.Toggle("Update", update_gui, GUILayout.MaxWidth(165)); GUILayout.EndHorizontal(); // DRAW if (view < 0 || view >= profiles.Count) { return; } pb_Sample root = profiles[view].GetRootSample(); if (root.children.Count < 1) { return; } Color bg = GUI.backgroundColor; GUILayout.BeginHorizontal(EditorStyles.toolbar); EditorGUILayout.Space(); GUILayout.Label("Sample", EditorStyles.toolbarButton, GUILayout.MinWidth(name_width - 6), GUILayout.MaxWidth(name_width - 6)); GUI.backgroundColor = odd_column_color; GUILayout.Label("Calls", EditorStyles.toolbarButton, GUILayout.MinWidth(sample_width), GUILayout.MaxWidth(sample_width)); GUI.backgroundColor = bg; GUILayout.Label("%", EditorStyles.toolbarButton, GUILayout.MinWidth(percent_width), GUILayout.MaxWidth(percent_width)); GUI.backgroundColor = odd_column_color; GUILayout.Label("Avg", EditorStyles.toolbarButton, GUILayout.MinWidth(avg_width), GUILayout.MaxWidth(avg_width)); GUI.backgroundColor = bg; GUILayout.Label("Sum", EditorStyles.toolbarButton, GUILayout.MinWidth(sum_width), GUILayout.MaxWidth(sum_width)); GUI.backgroundColor = odd_column_color; GUILayout.Label("Min", EditorStyles.toolbarButton, GUILayout.MinWidth(range_width), GUILayout.MaxWidth(range_width)); GUI.backgroundColor = bg; GUILayout.Label("Max", EditorStyles.toolbarButton, GUILayout.MinWidth(range_width), GUILayout.MaxWidth(range_width)); GUI.backgroundColor = odd_column_color; GUILayout.Label("Current", EditorStyles.toolbarButton, GUILayout.MinWidth(range_width), GUILayout.MaxWidth(range_width)); GUILayout.FlexibleSpace(); GUILayout.EndHorizontal(); scroll = EditorGUILayout.BeginScrollView(scroll); for (int i = 0; i < root.children.Count; i++) { DrawSampleTree(root.children[i]); } EditorGUILayout.EndScrollView(); GUILayout.BeginHorizontal(); if (GUILayout.Button("Print")) { Debug.Log(profiles[view].ToString()); } if (GUILayout.Button("Clear", GUILayout.MaxWidth(120))) { profiles[view].Reset(); } GUILayout.EndHorizontal(); }
void DrawSampleTree(pb_Sample sample) { DrawSampleTree(sample, 0, ""); }