Пример #1
0
        void DrawHelp()
        {
            using (new EditorGUILayout.VerticalScope(EditorStyles.helpBox))
            {
                GUILayout.Label("Help", HeEditorStyles.heading2);
                GUILayout.Space(8);

                GUILayout.Label("Documentation", EditorStyles.boldLabel);
                if (HeEditorGUILayout.LinkButton(new GUIContent(HeGlobals.k_DocuUrl)))
                {
                    Application.OpenURL(HeGlobals.k_DocuUrl);
                }
                GUILayout.Space(8);

                GUILayout.Label("Download, feedback and bug-reports", EditorStyles.boldLabel);
                if (HeEditorGUILayout.LinkButton(new GUIContent(HeGlobals.k_ForumUrl)))
                {
                    Application.OpenURL(HeGlobals.k_ForumUrl);
                }
                GUILayout.Space(8);

                GUILayout.Label("Source Code", EditorStyles.boldLabel);
                if (HeEditorGUILayout.LinkButton(new GUIContent(HeGlobals.k_RepositoryUrl)))
                {
                    Application.OpenURL(HeGlobals.k_RepositoryUrl);
                }
                GUILayout.Space(8);
            }
        }
        public override void OnGUI()
        {
            base.OnGUI();

            EditorGUI.BeginDisabledGroup(m_ObjectsControl.progress.value < 1);
            using (new EditorGUILayout.HorizontalScope())
            {
                using (new EditorGUILayout.VerticalScope())
                {
                    using (new EditorGUILayout.VerticalScope(HeEditorStyles.panel))
                    {
                        using (new EditorGUILayout.HorizontalScope())
                        {
                            var text = string.Format("{0} managed object duplicate(s) wasting {1} memory", m_ObjectsControl.managedObjectsCount, EditorUtility.FormatBytes(m_ObjectsControl.managedObjectsSize));
                            window.SetStatusbarString(text);

                            EditorGUILayout.LabelField(titleContent, EditorStyles.boldLabel);
                            if (m_ObjectsSearchField.OnToolbarGUI())
                            {
                                m_ObjectsControl.Search(m_ObjectsSearchField.text);
                            }
                        }
                        GUILayout.Space(2);

                        m_ObjectsControl.OnGUI();
                    }

                    m_SplitterVertConnections = HeEditorGUILayout.VerticalSplitter("m_splitterVertConnections".GetHashCode(), m_SplitterVertConnections, 0.1f, 0.8f, window);

                    using (new EditorGUILayout.HorizontalScope(GUILayout.Height(window.position.height * m_SplitterVertConnections)))
                    {
                        m_ConnectionsView.OnGUI();
                    }
                }

                m_SplitterHorzPropertyGrid = HeEditorGUILayout.HorizontalSplitter("m_splitterHorzPropertyGrid".GetHashCode(), m_SplitterHorzPropertyGrid, 0.1f, 0.6f, window);

                using (new EditorGUILayout.VerticalScope())
                {
                    using (new EditorGUILayout.VerticalScope(HeEditorStyles.panel, GUILayout.Width(window.position.width * m_SplitterHorzPropertyGrid)))
                    {
                        m_PropertyGridView.OnGUI();
                    }

                    m_SplitterVertRootPath = HeEditorGUILayout.VerticalSplitter("m_splitterVertRootPath".GetHashCode(), m_SplitterVertRootPath, 0.1f, 0.8f, window);

                    using (new EditorGUILayout.VerticalScope(HeEditorStyles.panel, GUILayout.Width(window.position.width * m_SplitterHorzPropertyGrid), GUILayout.Height(window.position.height * m_SplitterVertRootPath)))
                    {
                        m_RootPathView.OnGUI();
                    }
                }
            }
            EditorGUI.EndDisabledGroup();

            if (m_ObjectsControl.progress.value < 1)
            {
                window.SetBusy(string.Format("Analyzing Managed Objects Memory, {0:F0}% done", m_ObjectsControl.progress.value * 100));
            }
        }
Пример #3
0
        public override void OnGUI()
        {
            base.OnGUI();

            using (new EditorGUILayout.HorizontalScope())
            {
                using (new EditorGUILayout.VerticalScope())
                {
                    using (new EditorGUILayout.VerticalScope(HeEditorStyles.panel))
                    {
                        using (new EditorGUILayout.HorizontalScope())
                        {
                            OnDrawHeader();

                            if (m_ObjectsSearchField.OnToolbarGUI())
                            {
                                m_ObjectsControl.Search(m_ObjectsSearchField.text);
                            }
                        }
                        GUILayout.Space(2);

                        UnityEngine.Profiling.Profiler.BeginSample("m_objectsControl.OnGUI");
                        m_ObjectsControl.OnGUI();
                        UnityEngine.Profiling.Profiler.EndSample();
                    }

                    m_SplitterVertConnections = HeEditorGUILayout.VerticalSplitter("m_splitterVertConnections".GetHashCode(), m_SplitterVertConnections, 0.1f, 0.8f, window);

                    using (new EditorGUILayout.HorizontalScope(GUILayout.Height(window.position.height * m_SplitterVertConnections)))
                    {
                        m_ConnectionsView.OnGUI();
                    }
                }

                m_SplitterHorzPropertyGrid = HeEditorGUILayout.HorizontalSplitter("m_splitterHorzPropertyGrid".GetHashCode(), m_SplitterHorzPropertyGrid, 0.1f, 0.6f, window);

                using (new EditorGUILayout.VerticalScope())
                {
                    using (new EditorGUILayout.VerticalScope(HeEditorStyles.panel, GUILayout.Width(window.position.width * m_SplitterHorzPropertyGrid)))
                    {
                        m_PropertyGridView.OnGUI();
                    }

                    m_SplitterVertRootPath = HeEditorGUILayout.VerticalSplitter("m_splitterVertRootPath".GetHashCode(), m_SplitterVertRootPath, 0.1f, 0.8f, window);

                    using (new EditorGUILayout.VerticalScope(HeEditorStyles.panel, GUILayout.Width(window.position.width * m_SplitterHorzPropertyGrid), GUILayout.Height(window.position.height * m_SplitterVertRootPath)))
                    {
                        m_RootPathView.OnGUI();
                    }
                }
            }
        }
Пример #4
0
        void DrawHelp()
        {
            using (new EditorGUILayout.VerticalScope(EditorStyles.helpBox))
            {
                GUILayout.Label("Help", HeEditorStyles.heading2);
                GUILayout.Space(8);

                GUILayout.Label("Documentation", EditorStyles.boldLabel);
                if (HeEditorGUILayout.LinkButton(new GUIContent(HeGlobals.k_DocuUrl)))
                {
                    Application.OpenURL(HeGlobals.k_DocuUrl);
                }
                GUILayout.Space(8);

                GUILayout.Label("Changelog", EditorStyles.boldLabel);
                if (HeEditorGUILayout.LinkButton(new GUIContent(HeGlobals.k_ChangelogUrl)))
                {
                    Application.OpenURL(HeGlobals.k_ChangelogUrl);
                }
                GUILayout.Space(8);

                GUILayout.Label("Feedback and bug-reports", EditorStyles.boldLabel);
                if (HeEditorGUILayout.LinkButton(new GUIContent(HeGlobals.k_ForumUrl)))
                {
                    Application.OpenURL(HeGlobals.k_ForumUrl);
                }
                GUILayout.Space(8);

                GUILayout.Label("Unity Package and C# Source Code", EditorStyles.boldLabel);
                if (HeEditorGUILayout.LinkButton(new GUIContent(HeGlobals.k_RepositoryUrl)))
                {
                    Application.OpenURL(HeGlobals.k_RepositoryUrl);
                }
                GUILayout.Space(8);

                var memprofLink = "https://forum.unity.com/threads/new-memory-profiler-preview-package-available-for-unity-2018-3-and-newer-versions.597271/";
                GUILayout.Label("Unity Memory Profiler", EditorStyles.boldLabel);
                GUILayout.Label("Unity Technologies presented during Unite 2018 that they were working on a new Memory Profiler, which was made available shortly after. Their new Memory Profiler will make Heap Explorer obsolete eventually, if it didn't already. Don't miss to check out their Memory Profiler, it must be far superior to Heap Explorer by now.", EditorStyles.wordWrappedLabel);
                if (HeEditorGUILayout.LinkButton(new GUIContent(memprofLink)))
                {
                    Application.OpenURL(memprofLink);
                }
                GUILayout.Space(8);
            }
        }
Пример #5
0
        void DrawDataVisualizer()
        {
            if (m_DataVisualizer == null)
            {
                return;
            }

            GUILayout.Space(2);
            splitterDataVisualizer = HeEditorGUILayout.VerticalSplitter("splitterDataVisualizer".GetHashCode(), splitterDataVisualizer, 0.1f, 0.6f, window);
            GUILayout.Space(2);

            using (new EditorGUILayout.VerticalScope(HeEditorStyles.panel, GUILayout.Height(window.position.height * splitterDataVisualizer)))
            {
                using (new EditorGUILayout.HorizontalScope())
                {
                    // We draw a dataVisualizer always, but don't display the content of the fallback visualizer.
                    // This is to keep the UI free from hiding/showing the visualizer panel and keep it more stable.
                    // TODO: This is actually a HACK until I fixed the default preview
                    if (!m_DataVisualizer.isFallback)
                    {
                        EditorGUILayout.LabelField("Preview", EditorStyles.boldLabel);
                    }

                    if (m_DataVisualizer.hasMenu)
                    {
                        GUILayout.FlexibleSpace();

                        if (GUILayout.Button(new GUIContent("", "Open menu"), HeEditorStyles.paneOptions, GUILayout.Width(20)))
                        {
                            m_DataVisualizer.ShowMenu();
                        }
                    }
                }

                GUILayout.Space(4);

                using (var scrollView = new EditorGUILayout.ScrollViewScope(m_DataVisualizerScrollPos))
                {
                    m_DataVisualizerScrollPos = scrollView.scrollPosition;

                    m_DataVisualizer.GUI();
                }
            }
        }
Пример #6
0
        public override void OnGUI()
        {
            base.OnGUI();

            using (new EditorGUILayout.HorizontalScope())
            {
                using (new EditorGUILayout.VerticalScope())
                {
                    using (new EditorGUILayout.VerticalScope(HeEditorStyles.panel))
                    {
                        using (new EditorGUILayout.HorizontalScope())
                        {
                            var text = string.Format("{0} static fields in {1} types", snapshot.managedStaticFields.Length, snapshot.managedStaticTypes.Length);
                            window.SetStatusbarString(text);
                            EditorGUILayout.LabelField(titleContent, EditorStyles.boldLabel);
                            if (m_SearchField.OnToolbarGUI())
                            {
                                m_StaticFieldsControl.Search(m_SearchField.text);
                            }
                        }
                        GUILayout.Space(2);

                        m_StaticFieldsControl.OnGUI();
                    }

                    m_SplitterVert = HeEditorGUILayout.VerticalSplitter("m_splitterVert".GetHashCode(), m_SplitterVert, 0.1f, 0.8f, window);

                    using (new EditorGUILayout.HorizontalScope(GUILayout.Height(window.position.height * m_SplitterVert)))
                    {
                        m_ConnectionsView.OnGUI();
                    }
                }

                m_SplitterHorz = HeEditorGUILayout.HorizontalSplitter("m_splitterHorz".GetHashCode(), m_SplitterHorz, 0.1f, 0.8f, window);

                using (new EditorGUILayout.VerticalScope(HeEditorStyles.panel, GUILayout.Width(window.position.width * m_SplitterHorz)))
                {
                    m_PropertyGridView.OnGUI();
                }
            }
        }
Пример #7
0
        public override void OnGUI()
        {
            base.OnGUI();

            using (new EditorGUILayout.HorizontalScope())
            {
                using (new EditorGUILayout.VerticalScope())
                {
                    using (new EditorGUILayout.VerticalScope(HeEditorStyles.panel))
                    {
                        using (new EditorGUILayout.HorizontalScope())
                        {
                            EditorGUILayout.LabelField(string.Format("{0} GCHandle(s)", snapshot.gcHandles.Length), EditorStyles.boldLabel);

                            if (m_HandlesSearchField.OnToolbarGUI())
                            {
                                m_HandlesControl.Search(m_HandlesSearchField.text);
                            }
                        }
                        GUILayout.Space(2);

                        m_HandlesControl.OnGUI();
                    }

                    m_SplitterVert = HeEditorGUILayout.VerticalSplitter("m_splitterVert".GetHashCode(), m_SplitterVert, 0.1f, 0.8f, window);

                    using (new EditorGUILayout.HorizontalScope(GUILayout.Height(window.position.height * m_SplitterVert)))
                    {
                        m_ConnectionsView.OnGUI();
                    }
                }

                m_SplitterHorz = HeEditorGUILayout.HorizontalSplitter("m_splitterHorz".GetHashCode(), m_SplitterHorz, 0.1f, 0.8f, window);

                using (new EditorGUILayout.VerticalScope(HeEditorStyles.panel, GUILayout.Width(window.position.width * m_SplitterHorz)))
                {
                    m_RootPathView.OnGUI();
                }
            }
        }
        public override void OnGUI()
        {
            base.OnGUI();

            if (m_ShowInternalSections != s_ShowInternalSections)
            {
                m_ManagedHeapAddressSpace = ~0ul;
                m_ManagedHeapSize         = ~0ul;
                m_ShowInternalSections    = s_ShowInternalSections;
                m_SectionsControl.SetTree(m_SectionsControl.BuildTree(snapshot, GetMemorySections()));
                ScheduleJob(new HeapFragmentationJob()
                {
                    snapshot = snapshot, texture = m_HeapFragTexture, sections = GetMemorySections(), addressSpace = GetHeapAddressSpace()
                });
            }

            using (new EditorGUILayout.HorizontalScope())
            {
                using (new EditorGUILayout.VerticalScope())
                {
                    using (new EditorGUILayout.VerticalScope(HeEditorStyles.panel))
                    {
                        using (new EditorGUILayout.HorizontalScope())
                        {
                            EditorGUILayout.LabelField(titleContent, EditorStyles.boldLabel);
                            if (m_SectionsSearchField.OnToolbarGUI())
                            {
                                m_SectionsControl.Search(m_SectionsSearchField.text);
                            }
                        }

                        GUILayout.Space(2);
                        m_SectionsControl.OnGUI();
                    }

                    // Managed heap fragmentation view
                    using (new EditorGUILayout.VerticalScope(HeEditorStyles.panel))
                    {
                        var text = string.Format("{0} managed heap sections ({1}) within an {2} address space", GetMemorySections().Length, EditorUtility.FormatBytes((long)GetTotalHeapSize()), EditorUtility.FormatBytes((long)GetHeapAddressSpace()));
                        GUILayout.Label(text, EditorStyles.boldLabel);
                        GUI.DrawTexture(GUILayoutUtility.GetRect(100, window.position.height * 0.1f, GUILayout.ExpandWidth(true)), m_HeapFragTexture, ScaleMode.StretchToFill);
                    }
                }

                m_SplitterHorz = HeEditorGUILayout.HorizontalSplitter("m_splitterHorz".GetHashCode(), m_SplitterHorz, 0.1f, 0.8f, window);

                using (new EditorGUILayout.VerticalScope(GUILayout.Width(window.position.width * m_SplitterHorz)))
                {
                    if (m_ShowAsHex)
                    {
                        using (new EditorGUILayout.VerticalScope(HeEditorStyles.panel))
                        {
                            using (new EditorGUILayout.HorizontalScope())
                            {
                                GUILayout.FlexibleSpace();
                                OnToggleHexViewGUI();
                            }

                            //GUILayout.Space(2);
                            m_HexView.OnGUI();
                        }
                    }
                    else
                    {
                        m_ConnectionsView.OnGUI();
                    }

                    // Managed heap section fragmentation view
                    using (new EditorGUILayout.VerticalScope(HeEditorStyles.panel))
                    {
                        GUILayout.Label("Memory section usage (Issue: static field memory and gchandle memory is missing due to limited MemoryProfiling API)", EditorStyles.boldLabel);
                        GUI.DrawTexture(GUILayoutUtility.GetRect(100, window.position.height * 0.1f, GUILayout.ExpandWidth(true)), m_SectionFragTexture, ScaleMode.StretchToFill);
                    }
                }
            }
        }
Пример #9
0
        public override void OnGUI()
        {
            base.OnGUI();

            using (new EditorGUILayout.HorizontalScope())
            {
                using (new EditorGUILayout.VerticalScope())
                {
                    // Native objects list at the left side
                    using (new EditorGUILayout.VerticalScope(HeEditorStyles.panel))
                    {
                        using (new EditorGUILayout.HorizontalScope())
                        {
                            OnDrawHeader();

                            if (m_SearchField.OnToolbarGUI())
                            {
                                m_NativeObjectsControl.Search(m_SearchField.text);
                            }
                        }
                        GUILayout.Space(2);

                        m_NativeObjectsControl.OnGUI();
                    }

                    m_SplitterVert = HeEditorGUILayout.VerticalSplitter("m_splitterVert".GetHashCode(), m_SplitterVert, 0.1f, 0.8f, window);

                    using (new EditorGUILayout.HorizontalScope(GUILayout.Height(window.position.height * m_SplitterVert)))
                    {
                        m_ConnectionsView.OnGUI();
                    }
                }

                m_SplitterHorz = HeEditorGUILayout.HorizontalSplitter("m_splitterHorz".GetHashCode(), m_SplitterHorz, 0.1f, 0.8f, window);

                // Various panels at the right side
                using (new EditorGUILayout.VerticalScope(GUILayout.Width(window.position.width * m_SplitterHorz)))
                {
                    using (new EditorGUILayout.VerticalScope(HeEditorStyles.panel))
                    {
                        using (new EditorGUILayout.HorizontalScope(GUILayout.MaxWidth(16)))
                        {
                            if (m_Selected.HasValue)
                            {
                                HeEditorGUI.NativeObjectIcon(GUILayoutUtility.GetRect(16, 16), m_Selected.Value);
                                //GUI.DrawTexture(r, HeEditorStyles.assetImage);
                            }

                            EditorGUILayout.LabelField("Native UnityEngine object", EditorStyles.boldLabel);
                        }

                        GUILayout.Space(2);
                        m_NativeObjectControl.OnGUI();
                    }

                    m_PreviewSplitterVert = HeEditorGUILayout.VerticalSplitter("m_PreviewSplitterVert".GetHashCode(), m_PreviewSplitterVert, 0.1f, 0.8f, window);

                    using (new EditorGUILayout.VerticalScope(HeEditorStyles.panel, GUILayout.Height(window.position.height * m_PreviewSplitterVert)))
                    {
                        m_PreviewView.OnGUI();
                    }

                    m_RootPathSplitterVert = HeEditorGUILayout.VerticalSplitter("m_RootPathSplitterVert".GetHashCode(), m_RootPathSplitterVert, 0.1f, 0.8f, window);

                    using (new EditorGUILayout.VerticalScope(HeEditorStyles.panel, GUILayout.Height(window.position.height * m_RootPathSplitterVert)))
                    {
                        m_RootPathView.OnGUI();
                    }
                }
            }
        }
Пример #10
0
        public override void OnGUI()
        {
            base.OnGUI();

            if (showReferences)
            {
                using (new EditorGUI.DisabledGroupScope(showReferencesAsExcluded))
                {
                    using (new EditorGUILayout.VerticalScope(HeEditorStyles.panel))
                    {
                        using (new EditorGUILayout.HorizontalScope())
                        {
                            EditorGUILayout.LabelField(string.Format("References to {0} object(s)", m_ReferencesControl.count), EditorStyles.boldLabel);
                            if (m_ReferencesSearchField.OnToolbarGUI())
                            {
                                m_ReferencesControl.Search(m_ReferencesSearchField.text);
                            }
                            if (afterReferencesToolbarGUI != null)
                            {
                                afterReferencesToolbarGUI();
                            }
                        }

                        GUILayout.Space(2);
                        m_ReferencesControl.OnGUI();
                    }
                }

                if (showReferencesAsExcluded)
                {
                    GUI.Label(GUILayoutUtility.GetLastRect(), "This information was excluded from the memory snapshot.", HeEditorStyles.centeredBoldLabel);
                }
            }

            GUILayoutOption[] options = null;
            if (showReferences && showReferencedBy)
            {
                m_SplitterValue = HeEditorGUILayout.HorizontalSplitter("m_splitterValue".GetHashCode(), m_SplitterValue, 0.1f, 0.6f, window);
                options         = new[] { GUILayout.Width(window.position.width * m_SplitterValue) };
            }

            if (showReferencedBy)
            {
                using (new EditorGUI.DisabledGroupScope(showReferencedByAsExcluded))
                {
                    using (new EditorGUILayout.VerticalScope(HeEditorStyles.panel, options))
                    {
                        using (new EditorGUILayout.HorizontalScope())
                        {
                            EditorGUILayout.LabelField(string.Format("Referenced by {0} object(s)", m_ReferencedByControl.count), EditorStyles.boldLabel);
                            if (m_ReferencedBySearchField.OnToolbarGUI())
                            {
                                m_ReferencedByControl.Search(m_ReferencedBySearchField.text);
                            }

                            if (afterReferencedByToolbarGUI != null)
                            {
                                afterReferencedByToolbarGUI();
                            }
                        }
                        GUILayout.Space(2);
                        m_ReferencedByControl.OnGUI();
                    }
                }

                if (showReferencedByAsExcluded)
                {
                    GUI.Label(GUILayoutUtility.GetLastRect(), "This information was excluded from the memory snapshot.", HeEditorStyles.centeredBoldLabel);
                }
            }
        }
Пример #11
0
        public override void OnGUI()
        {
            base.OnGUI();

            if (m_Guids.Count > 0 && m_LoadPreview)
            {
                // Load one asset after another to avoid making the editor too laggy
                if ((m_PreviewTime + 0.2f < Time.realtimeSinceStartup) && Event.current.type == EventType.Repaint)
                {
                    var guid = m_Guids[m_Guids.Count - 1];
                    m_Guids.RemoveAt(m_Guids.Count - 1);

                    // Make sure the filename and object name match
                    var path     = AssetDatabase.GUIDToAssetPath(guid);
                    var fileName = System.IO.Path.GetFileNameWithoutExtension(path);
                    if (string.Equals(fileName, m_Object.name, System.StringComparison.OrdinalIgnoreCase))
                    {
                        var asset = AssetDatabase.LoadMainAssetAtPath(AssetDatabase.GUIDToAssetPath(guid));
                        if (asset != null)
                        {
                            m_LoadedAssets.Add(asset);
                        }
                    }

                    if (m_Guids.Count == 0 && m_LoadedAssets.Count > 0)
                    {
                        m_HasPreviewAssets = true;
                        m_Editor           = Editor.CreateEditor(m_LoadedAssets.ToArray());
                    }
                }

                DrawPreviewButtons(false);

                var rect = HeEditorGUILayout.GetLargeRect();
                var text = "Loading preview...";
                DrawBackground(rect, text, true);

                if (m_Guids.Count > 3)
                {
                    rect = new Rect(rect.center.x - 50, rect.center.y + 20, 100, 40);
                    if (GUI.Button(rect, "Cancel"))
                    {
                        m_Guids.Clear();
                    }
                }

                window.Repaint();
                return;
            }

            if (!m_Object.isValid || !m_Object.isPersistent)
            {
                DrawPreviewButtons(false);

                var text = "Select an asset to display its preview here.";
                DrawBackground(HeEditorGUILayout.GetLargeRect(), text, true);
                return;
            }

            // Tried to load preview already?
            if (!m_LoadPreview)
            {
                DrawPreviewButtons(false);

                var rect = HeEditorGUILayout.GetLargeRect();
                DrawBackground(rect, null, true);

                rect = new Rect(rect.center.x - 75, rect.center.y - 20, 150, 40);
                if (GUI.Button(rect, "Try load preview"))
                {
                    LoadAssetPreviews();
                }
                return;
            }

            // No preview could be loaded
            if (!m_HasPreviewAssets)
            {
                DrawPreviewButtons(false);

                var text = string.Format("Could not find any asset named '{1}' of type '{0}' in the project.", m_Object.type.name, m_Object.name);
                DrawBackground(HeEditorGUILayout.GetLargeRect(), text, true);
                return;
            }

            // Has the asset an actual preview at all?
            if (!m_Editor.HasPreviewGUI())
            {
                DrawPreviewButtons(false);

                var text = "The selected asset does not have a preview.";
                DrawBackground(HeEditorGUILayout.GetLargeRect(), text, true);
                return;
            }

            // We are here if we can render a preview
            DrawPreviewButtons(true);

            // DrawPreviewButtons can request an preview update, this can set m_Editor to null
            if (m_Editor != null)
            {
                var rect = HeEditorGUILayout.GetLargeRect();
                DrawBackground(rect, null, false);
                m_Editor.DrawPreview(rect);
            }
        }