public void DoGUI(GUIStyle headerStyle, HierarchyFrameDataView frameDataView, IList <int> selection)
        {
            if (frameDataView == null || !frameDataView.valid || selection.Count == 0)
            {
                DrawEmptyPane(headerStyle);
                return;
            }

            InitIfNeeded();
            UpdateIfNeeded(frameDataView, selection[0]);

            string callstack        = null;
            var    selectedSampleId = m_TreeView.GetSelectedFrameDataViewId();

            if (selectedSampleId != -1)
            {
                callstack = frameDataView.ResolveItemMergedSampleCallstack(selectedSampleId, m_TreeView.state.selectedIDs[0]);
            }

            var showCallstack = !string.IsNullOrEmpty(callstack);

            if (showCallstack)
            {
                SplitterGUILayout.BeginVerticalSplit(m_VertSplit, Styles.expandedArea);
            }

            // Detailed list
            var rect = EditorGUILayout.BeginVertical(Styles.expandedArea);

            m_TreeView.OnGUI(rect);

            EditorGUILayout.EndVertical();

            if (showCallstack)
            {
                // Callstack area
                EditorGUILayout.BeginVertical(Styles.expandedArea);
                m_CallstackScrollViewPos = EditorGUILayout.BeginScrollView(m_CallstackScrollViewPos, Styles.callstackScroll);

                var text = kCallstackText + '\n' + callstack;
                EditorGUILayout.TextArea(text, Styles.callstackTextArea);

                EditorGUILayout.EndScrollView();
                EditorGUILayout.EndVertical();

                SplitterGUILayout.EndVerticalSplit();
            }
        }