private void OnGUI()
        {
            EditorGUI.BeginDisabledGroup(EditorApplication.isCompiling);
            DrawToolButtons();
            DrawHeaders();
            if (_contentScrolls == null || _contentScrolls.Length != 2)
            {
                _contentScrolls = new Vector2[] { Vector2.zero, Vector2.zero };
            }
            EditorHelper.BeginVerticalSplit(contentSplitState);
            _contentScrolls[0] = EditorGUILayout.BeginScrollView(_contentScrolls[0]);
            var ids = Trace.ListTaskSourceIds();

            foreach (var id in ids)
            {
                var item = Trace.GetTraceItem(id);
                DrawTraceItem(item);
                if (_selectedItem == null)
                {
                    _selectedItem = item;
                }
            }
            EditorGUILayout.EndScrollView();

            _contentScrolls[1] = EditorGUILayout.BeginScrollView(_contentScrolls[1], EditorStyles.helpBox);
            DrawStackTrace();
            EditorGUILayout.EndScrollView();
            EditorHelper.EndVerticalSplit();

            EditorGUI.EndDisabledGroup();
        }
        private void DrawTraceItem(Trace.TraceItem item)
        {
            var realSizes = headerSplitState.realSizes;
            var original  = GUI.backgroundColor;

            if (_selectedItem == item)
            {
                GUI.backgroundColor = Color.grey;
            }
            GUILayout.BeginHorizontal(EditorStyles.helpBox);
            GUILayout.Label(item.Name, GUILayout.Width(realSizes[0]));
            GUILayout.Label(item.IsAlive?"Alive":"Dead", GUILayout.Width(realSizes[1]));
            EditorGUILayout.LabelField(item.StackTrace, GUILayout.Width(realSizes[2]));
            GUILayout.EndHorizontal();
            var rect = GUILayoutUtility.GetLastRect();

            if (GUI.Button(rect, GUIContent.none, GUIStyle.none))
            {
                _selectedItem = item;
            }
            GUI.backgroundColor = original;
        }