void InitIfNeeded()
            {
                if (m_Initialized)
                {
                    return;
                }

                if (m_ViewState == null)
                {
                    m_ViewState = new TreeViewState();
                }

                var headerState = CreateDefaultMultiColumnHeaderState();

                var multiColumnHeaderStateData = SessionState.GetString(multiColumnHeaderStatePrefKey, "");

                if (!string.IsNullOrEmpty(multiColumnHeaderStateData))
                {
                    try
                    {
                        var restoredHeaderState = JsonUtility.FromJson <MultiColumnHeaderState>(multiColumnHeaderStateData);
                        if (restoredHeaderState != null)
                        {
                            m_ViewHeaderState = restoredHeaderState;
                        }
                    }
                    catch {} // Nevermind, we'll just fall back to the default
                }

                if (MultiColumnHeaderState.CanOverwriteSerializedFields(m_ViewHeaderState, headerState))
                {
                    MultiColumnHeaderState.OverwriteSerializedFields(m_ViewHeaderState, headerState);
                }

                var firstInit = m_ViewHeaderState == null;

                m_ViewHeaderState = headerState;

                var multiColumnHeader = new MultiColumnHeader(m_ViewHeaderState)
                {
                    height = 25
                };

                if (firstInit)
                {
                    multiColumnHeader.state.visibleColumns = new[]
                    {
                        (int)CallsTreeView.Column.Name, (int)CallsTreeView.Column.Calls, (int)CallsTreeView.Column.GcAlloc, (int)CallsTreeView.Column.TimeMs, (int)CallsTreeView.Column.TimePercent,
                    };
                    multiColumnHeader.ResizeToFit();
                }

                multiColumnHeader.visibleColumnsChanged += OnMultiColumnHeaderChanged;
                multiColumnHeader.sortingChanged        += OnMultiColumnHeaderChanged;

                m_View = new CallsTreeView(m_Type, m_ViewState, multiColumnHeader);
                m_View.frameItemEvent += frameItemEvent;

                m_Initialized = true;
            }
            void InitIfNeeded()
            {
                if (m_Initialized)
                {
                    return;
                }

                if (m_ViewState == null)
                {
                    m_ViewState = new TreeViewState();
                }

                var firstInit   = m_ViewHeaderState == null;
                var headerState = CreateDefaultMultiColumnHeaderState();

                if (MultiColumnHeaderState.CanOverwriteSerializedFields(m_ViewHeaderState, headerState))
                {
                    MultiColumnHeaderState.OverwriteSerializedFields(m_ViewHeaderState, headerState);
                }
                m_ViewHeaderState = headerState;

                var multiColumnHeader = new MultiColumnHeader(m_ViewHeaderState)
                {
                    height = 25
                };

                if (firstInit)
                {
                    multiColumnHeader.state.visibleColumns = new[]
                    {
                        (int)CallsTreeView.Column.Name, (int)CallsTreeView.Column.Calls, (int)CallsTreeView.Column.TimeMs, (int)CallsTreeView.Column.TimePercent,
                    };
                    multiColumnHeader.ResizeToFit();
                }

                m_View = new CallsTreeView(m_Type, m_ViewState, multiColumnHeader);
                m_View.frameItemEvent += frameItemEvent;

                m_Initialized = true;
            }