Exemplo n.º 1
0
 void DrawHorizontalDetails()
 {
     using (var f = ProfilerDriver.GetRawFrameDataView(ProfilerWindow.GetActiveVisibleFrameIndex(), 0))
     {
         if (f.valid)
         {
             EditorGUILayout.BeginHorizontal();
             EditorGUILayout.LabelField("Total Overlaps: " + GetCounterValue(f, "Overlaps"), GUILayout.Width(k_labelWidthTitle));
             EditorGUILayout.LabelField("| Discreet: " + GetCounterValue(f, "Discreet Overlaps"), GUILayout.Width(k_labelWidthDetail));
             EditorGUILayout.LabelField("Continuous: " + GetCounterValue(f, "Continuous Overlaps"), GUILayout.Width(k_labelWidthDetail));
             EditorGUILayout.LabelField("Trigger: " + GetCounterValue(f, "Trigger Overlaps"), GUILayout.Width(k_labelWidthDetail));
             EditorGUILayout.LabelField("Modified: " + GetCounterValue(f, "Modified Overlaps"), GUILayout.Width(k_labelWidthDetail));
             EditorGUILayout.EndHorizontal();
             EditorGUILayout.BeginHorizontal();
             EditorGUILayout.LabelField("Broadphase Adds/Removes: " + GetCounterValue(f, "Broadphase Adds/Removes"), GUILayout.Width(k_labelWidthTitle));
             EditorGUILayout.LabelField("| Adds: " + GetCounterValue(f, "Broadphase Adds"), GUILayout.Width(k_labelWidthDetail));
             EditorGUILayout.LabelField("Removes: " + GetCounterValue(f, "Broadphase Removes"), GUILayout.Width(k_labelWidthDetail));
             EditorGUILayout.EndHorizontal();
             EditorGUILayout.BeginHorizontal();
             EditorGUILayout.LabelField("Narrowphase Touches: " + GetCounterValue(f, "Narrowphase Touches"), GUILayout.Width(k_labelWidthTitle));
             EditorGUILayout.LabelField("| New: " + GetCounterValue(f, "Narrowphase New Touches"), GUILayout.Width(k_labelWidthDetail));
             EditorGUILayout.LabelField("Lost: " + GetCounterValue(f, "Narrowphase Lost Touches"), GUILayout.Width(k_labelWidthDetail));
             EditorGUILayout.EndHorizontal();
         }
     }
 }
    void PrintDatas(string dataType)
    {
        var parent        = Directory.GetParent(Application.dataPath);
        var directoryPath = parent.FullName + "/ProfilerData";

        if (!Directory.Exists(directoryPath))
        {
            Directory.CreateDirectory(directoryPath);
        }

        var outputPath = string.Format("{0}/ProfilerDetailed{1:yyyy_MM_dd_HH_mm_ss}.txt", directoryPath, DateTime.Now);

        File.Create(outputPath).Dispose();
        using (var writer = new StreamWriter(outputPath))
        {
            switch (dataType)
            {
            case "CPU":
                ProfilerWindow.SwitchWindow(ProfilerArea.CPU);
                ProfilerWindow.WriteCPU(writer, ProfilerWindow.GetCPUDetail(writer));
                break;

            case "GPU":
                ProfilerWindow.SwitchWindow(ProfilerArea.GPU);
                ProfilerWindow.WriteGPU(writer, ProfilerWindow.GetGPUDetail(writer));
                break;
            }
            writer.Flush();
            writer.Close();
        }
        Process.Start(outputPath);
    }
Exemplo n.º 3
0
 public InitializationArgs(string identifier, string name, string iconPath, ProfilerWindow profilerWindow)
 {
     Identifier     = identifier;
     DisplayName    = name;
     IconPath       = iconPath;
     ProfilerWindow = profilerWindow;
 }
    void SampleData(int begin, int end)
    {
        ClearAllData();
        if (isSampleCPU)
        {
            CPUUsedTimePorprotion = ProfilerWindow.UsedTimeProportion(begin, end, timeThreshold, timeThreshold.Length);
            cpuData = ProfilerWindow.CPUOrGPUUsedTime(begin, end, ProfilerColumn.TotalTime);
        }

        if (isSampleGPU)
        {
            gpuData = ProfilerWindow.CPUOrGPUUsedTime(begin, end, ProfilerColumn.TotalGPUTime);
        }

        if (isSampleGC)
        {
            GCTotalTime = 0;
            GCFrame     = ProfilerWindow.GCCollectCount(begin, end, "GC.Collect", ref GCTotalTime);
        }

        if (isSampleFuncDetail)
        {
            CPUFunctionDetail = ProfilerWindow.CPUFunctionDetail(begin, end, targetName);
        }

        if (isPrintHighUsedFunc)
        {
            highFuncList = ProfilerWindow.HighUsedFunc(begin, end, highFuncPorprotion);
        }

        SaveDataAndDraw();
    }
Exemplo n.º 5
0
        /// <inheritdoc />
        public override void OnInit()
        {
            Assert.IsNull(MainWindow);

            _windowsLayoutPath = StringUtils.CombinePaths(Globals.ProjectCacheFolder, "WindowsLayout.xml");

            // Create main window
            var dpiScale = Platform.DpiScale;
            var settings = CreateWindowSettings.Default;

            settings.Title         = "Flax Editor";
            settings.Size          = new Vector2(1300 * dpiScale, 900 * dpiScale);
            settings.StartPosition = WindowStartPosition.CenterScreen;

            if (!Editor.Instance.Options.Options.Interface.UseNativeWindowSystem)
            {
                settings.HasBorder      = false;
                settings.HasSizingFrame = false;
            }

            MainWindow = Window.Create(settings);

            if (MainWindow == null)
            {
                // Error
                Editor.LogError("Failed to create editor main window!");
                return;
            }
            UpdateWindowTitle();

            // Link for main window events
            MainWindow.Closing += MainWindow_OnClosing;
            MainWindow.Closed  += MainWindow_OnClosed;

            // Create default editor windows
            ContentWin         = new ContentWindow(Editor);
            EditWin            = new EditGameWindow(Editor);
            GameWin            = new GameWindow(Editor);
            PropertiesWin      = new PropertiesWindow(Editor);
            SceneWin           = new SceneTreeWindow(Editor);
            DebugLogWin        = new DebugLogWindow(Editor);
            OutputLogWin       = new OutputLogWindow(Editor);
            ToolboxWin         = new ToolboxWindow(Editor);
            GraphicsQualityWin = new GraphicsQualityWindow(Editor);
            GameCookerWin      = new GameCookerWindow(Editor);
            ProfilerWin        = new ProfilerWindow(Editor);
            EditorOptionsWin   = new EditorOptionsWindow(Editor);
            PluginsWin         = new PluginsWindow(Editor);

            // Bind events
            SceneManager.SceneSaveError     += OnSceneSaveError;
            SceneManager.SceneLoaded        += OnSceneLoaded;
            SceneManager.SceneLoadError     += OnSceneLoadError;
            SceneManager.SceneLoading       += OnSceneLoading;
            SceneManager.SceneSaved         += OnSceneSaved;
            SceneManager.SceneSaving        += OnSceneSaving;
            SceneManager.SceneUnloaded      += OnSceneUnloaded;
            SceneManager.SceneUnloading     += OnSceneUnloading;
            ScriptsBuilder.ScriptsReloadEnd += OnScriptsReloadEnd;
        }
        internal static void SetProfilerDeepProfile(bool deepProfile)
        {
#if UNITY_2019_3_OR_NEWER
            ProfilerWindow.SetEditorDeepProfiling(deepProfile);
#else
            ProfilerDriver.deepProfiling = deepProfile;
            RequestScriptReload();
#endif
        }
 public MemoryProfilerModuleViewController(ProfilerWindow profilerWindow, MemoryProfilerModule memoryModule) : base(profilerWindow)
 {
     profilerWindow.SelectedFrameIndexChanged += UpdateContent;
     m_MemoryModule = memoryModule;
     if (!m_MemoryModule.InitiateMemoryProfilerPackageAvailabilityCheck())
     {
         m_InitiatedPackageSearchQuery = true;
     }
 }
Exemplo n.º 8
0
        public void OnDisable()
        {
            if (m_ProfilerWindow != null)
            {
                m_ProfilerWindow = null;
            }

#if UNITY_2021_1_OR_NEWER
            if (m_CpuProfilerModule != null)
            {
                m_CpuProfilerModule.selectionChanged -= OnSelectionChangedInCpuProfilerModule;
                m_CpuProfilerModule = null;
            }
#endif
        }
Exemplo n.º 9
0
        /// <inheritdoc />
        public override void OnInit()
        {
            Assert.IsNull(MainWindow);

            _windowsLayoutPath = StringUtils.CombinePaths(Globals.ProjectCacheFolder, "WindowsLayout.xml");

            // Create main window
            var settings = CreateWindowSettings.Default;

            settings.Title         = "Flax Editor";
            settings.Size          = new Vector2(1300, 900);
            settings.StartPosition = WindowStartPosition.CenterScreen;
            MainWindow             = Window.Create(settings);
            if (MainWindow == null)
            {
                // Error
                Debug.LogError("Failed to create editor main window!");
                return;
            }
            UpdateWindowTitle();

            // Link for main window events
            MainWindow.OnClosing += MainWindow_OnClosing;
            MainWindow.OnClosed  += MainWindow_OnClosed;

            // Create default editor windows
            ContentWin         = new ContentWindow(Editor);
            EditWin            = new EditGameWindow(Editor);
            GameWin            = new GameWindow(Editor);
            PropertiesWin      = new PropertiesWindow(Editor);
            SceneWin           = new SceneTreeWindow(Editor);
            DebugWin           = new DebugLogWindow(Editor);
            ToolboxWin         = new ToolboxWindow(Editor);
            GraphicsQualityWin = new GraphicsQualityWindow(Editor);
            GameCookerWin      = new GameCookerWindow(Editor);
            ProfilerWin        = new ProfilerWindow(Editor);
            EditorOptionsWin   = new EditorOptionsWindow(Editor);

            // Bind events
            SceneManager.SceneSaveError += OnSceneSaveError;
            SceneManager.SceneLoaded    += OnSceneLoaded;
            SceneManager.SceneLoadError += OnSceneLoadError;
            SceneManager.SceneLoading   += OnSceneLoading;
            SceneManager.SceneSaved     += OnSceneSaved;
            SceneManager.SceneSaving    += OnSceneSaving;
            SceneManager.SceneUnloaded  += OnSceneUnloaded;
            SceneManager.SceneUnloading += OnSceneUnloading;
        }
Exemplo n.º 10
0
        public override void CreateProfiler(ProfilerConfig config, int enabledTimeRulerLevels, int enabledPerformanceGraphLevels, int enabledProfilerSummaryLevels)
        {
            if (CreateUI == false)
            {
                return;
            }

            _profilerConfig = config;

            _profilerViewModel = new ProfilerViewModel(config.TimeRulerConfig.VisibleLevelsFlags, config.PerformanceGraphConfig.VisibleLevelsFlags, config.ProfilerSummaryConfig.VisibleLevelsFlags);
            _profilerViewModel.LevelItemChanged += (sender, args) =>
            {
                OnLevelItemChanged(new LevelItemChangedEventArgs(args.Key, args.LevelId, args.Enabled));
            };

            _profilerWindow = new ProfilerWindow
            {
                Top    = config.Top,
                Left   = config.Left,
                Width  = config.Width,
                Height = config.Height
            };

            _profilerWindow.trLevelsListBox.DataContext = _profilerViewModel.TimeRulerLevels;
            _profilerWindow.PgLevelsListBox.DataContext = _profilerViewModel.PerformanceGraphLevels;
            _profilerWindow.PsLevelsListBox.DataContext = _profilerViewModel.ProfilerSummaryLevels;

            _profilerWindow.EnableAllTimeRulerLevels         += (sender, args) => { _profilerViewModel.EnableAllTimeRulerLevels(); };
            _profilerWindow.DisableAllTimeRulerLevels        += (sender, args) => { _profilerViewModel.DisableAllTimeRulerLevels(); };
            _profilerWindow.EnableAllPerformanceGraphLevels  += (sender, args) => { _profilerViewModel.EnableAllPerformanceGraphLevels(); };
            _profilerWindow.DisableAllPerformanceGraphLevels += (sender, args) => { _profilerViewModel.DisableAllPerformanceGraphLevels(); };
            _profilerWindow.EnableAllProfilerSummaryLevels   += (sender, args) => { _profilerViewModel.EnableAllProfilerSummaryLevels(); };
            _profilerWindow.DisableAllProfilerSummaryLevels  += (sender, args) => { _profilerViewModel.DisableAllProfilerSummaryLevels(); };

            _profilerWindow.IsVisibleChanged += (sender, args) => _profilerConfig.Visible = _profilerWindow.IsVisible;
            _profilerWindow.LocationChanged  += (sender, args) => _profilerLocationJustChanged = true;
            _profilerWindow.SizeChanged      += (sender, args) => _profilerLocationJustChanged = true;

            if (_profilerConfig.Visible)
            {
                _profilerWindow.Show();
            }

            _windows.Add(_profilerWindow);

            WindowHelper.EnsureOnScreen(_profilerWindow);
        }
Exemplo n.º 11
0
        Rect DrawAudioStatsPane(ref Vector2 scrollPos)
        {
            var totalRect = GUILayoutUtility.GetRect(20f, 20000f, 10, 10000f);
            var statsRect = new Rect(totalRect.x, totalRect.y, 230f, totalRect.height);
            var rightRect = new Rect(statsRect.xMax, totalRect.y, totalRect.width - statsRect.width, totalRect.height);

            // STATS
            var content  = ProfilerDriver.GetOverviewText(area, ProfilerWindow.GetActiveVisibleFrameIndex());
            var textSize = EditorStyles.wordWrappedLabel.CalcSize(GUIContent.Temp(content));

            scrollPos = GUI.BeginScrollView(statsRect, scrollPos, new Rect(0, 0, textSize.x, textSize.y));
            GUI.Label(new Rect(3, 3, textSize.x, textSize.y), content, EditorStyles.wordWrappedLabel);
            GUI.EndScrollView();
            EditorGUI.DrawRect(new Rect(statsRect.xMax - 1, statsRect.y, 1, statsRect.height), Color.black);

            return(rightRect);
        }
Exemplo n.º 12
0
        public void OpenProfilerOrUseExisting()
        {
            // Note we use existing if possible to fix a bug after domain reload
            // Where calling EditorWindow.GetWindow directly causes a second window to open
            if (m_ProfilerWindow == null)
            {
#if UNITY_2021_1_OR_NEWER
                m_ProfilerWindow    = EditorWindow.GetWindow <ProfilerWindow>();
                m_CpuProfilerModule = m_ProfilerWindow.GetFrameTimeViewSampleSelectionController(ProfilerWindow.cpuModuleName);
                m_CpuProfilerModule.selectionChanged -= OnSelectionChangedInCpuProfilerModule;
                m_CpuProfilerModule.selectionChanged += OnSelectionChangedInCpuProfilerModule;
#else
                // Create new
                m_ProfilerWindow = EditorWindow.GetWindow(m_ProfilerWindowType);
#endif
            }
        }
Exemplo n.º 13
0
        public override void DrawDetailsView(Rect position)
        {
            string activeText = string.Empty;

            using (var f = ProfilerDriver.GetRawFrameDataView(ProfilerWindow.GetActiveVisibleFrameIndex(), 0))
            {
                if (f.valid)
                {
                    if (m_ShowStatsView == PhysicsProfilerStatsView.Current)
                    {
                        var stringBuilder = new StringBuilder(1024);
                        stringBuilder.Append("Physics Used Memory: " + GetCounterValueAsBytes(f, "Physics Used Memory"));

                        stringBuilder.Append("\n\nDynamic Bodies: " + GetCounterValue(f, "Dynamic Bodies"));
                        stringBuilder.Append("\nArticulation Bodies: " + GetCounterValue(f, "Articulation Bodies"));

                        stringBuilder.Append("\n\nActive Dynamic Bodies: " + GetCounterValue(f, "Active Dynamic Bodies"));
                        stringBuilder.Append("\nActive Kinematic Bodies: " + GetCounterValue(f, "Active Kinematic Bodies"));

                        stringBuilder.Append("\n\nStatic Colliders: " + GetCounterValue(f, "Static Colliders"));
                        stringBuilder.Append($"\nColliders Synced: {GetCounterValue(f, "Colliders Synced")}");
                        stringBuilder.Append($"\nRigidbodies Synced: {GetCounterValue(f, "Rigidbodies Synced")}");

                        stringBuilder.Append("\n\nPhysics Queries: " + GetCounterValue(f, "Physics Queries"));

                        activeText = stringBuilder.ToString();
                    }
                    else
                    {
                        // Old data compatibility.
                        activeText = ProfilerDriver.GetOverviewText(ProfilerArea.Physics, ProfilerWindow.GetActiveVisibleFrameIndex());
                    }
                }
            }

            float height = EditorStyles.wordWrappedLabel.CalcHeight(GUIContent.Temp(activeText), position.width);

            m_PaneScroll = GUILayout.BeginScrollView(m_PaneScroll, ProfilerWindow.Styles.background);
            EditorGUILayout.SelectableLabel(activeText, EditorStyles.wordWrappedLabel, GUILayout.MinHeight(height));
            if (m_ShowStatsView == PhysicsProfilerStatsView.Current && activeText != string.Empty)
            {
                DrawHorizontalDetails();
            }
            GUILayout.EndScrollView();
        }
Exemplo n.º 14
0
        public MainWindow()
        {
            InitializeComponent();
            SetupLogging();
            UpdateAppStates(AppState.APP_STATE_UNINITIALIZED);
            UpdateStatus();
            SetTitle();
            UpdateProfiling();
            SetLoggingLevel(Settings.Level);

            profilerWindow = new ProfilerWindow();
            profilerWindow.OnProfilerClosed += ProfilerWindow_OnClosed;
            monitorWindow = new MonitorWindow();
            monitorWindow.OnMonitorClosed += PortMonitorWindow_OnClosed;
            PortMonitor.SetMonitor(monitorWindow);

            commTester = new CommTester();
        }
Exemplo n.º 15
0
 private void OnLoadProfileData()
 {
     using (var frameData = ProfilerDriver.GetRawFrameDataView(ProfilerWindow.GetActiveVisibleFrameIndex(), 0))
     {
         if (frameData.valid)
         {
             var physicsQueries = GetCounterValue(frameData, "Total Queries");
             if (physicsQueries != -1)
             {
                 m_ShowStatsView = PhysicsProfilerStatsView.Current;
             }
             else
             {
                 m_ShowStatsView = PhysicsProfilerStatsView.Legacy;
             }
         }
     }
 }
Exemplo n.º 16
0
        public override void DrawDetailsView(Rect position)
        {
            string activeText = string.Empty;

            using (var f = ProfilerDriver.GetRawFrameDataView(ProfilerWindow.GetActiveVisibleFrameIndex(), 0))
            {
                if (f.valid)
                {
                    var batchesCount = GetCounterValue(f, "Batches Count");
                    if (batchesCount != -1)
                    {
                        var stringBuilder = new StringBuilder(1024);

                        stringBuilder.Append($"SetPass Calls: {GetCounterValueAsNumber(f, "SetPass Calls Count")}   \tDraw Calls: {GetCounterValueAsNumber(f, "Draw Calls Count")} \t\tBatches: {batchesCount} \tTriangles: {GetCounterValueAsNumber(f, "Triangles Count")} \tVertices: {GetCounterValueAsNumber(f, "Vertices Count")}");
                        stringBuilder.Append($"\n(Dynamic Batching)\tBatched Draw Calls: {GetCounterValueAsNumber(f, "Dynamic Batched Draw Calls Count")} \tBatches: {GetCounterValueAsNumber(f, "Dynamic Batches Count")} \tTriangles: {GetCounterValueAsNumber(f, "Dynamic Batched Triangles Count")} \tVertices: {GetCounterValueAsNumber(f, "Dynamic Batched Vertices Count")} \tTime: {GetCounterValue(f, "Dynamic Batching Time") * 1e-6:0.00}ms");
                        stringBuilder.Append($"\n(Static Batching)\t\tBatched Draw Calls: {GetCounterValueAsNumber(f, "Static Batched Draw Calls Count")} \tBatches: {GetCounterValueAsNumber(f, "Static Batches Count")} \tTriangles: {GetCounterValueAsNumber(f, "Static Batched Triangles Count")} \tVertices: {GetCounterValueAsNumber(f, "Static Batched Vertices Count")}");
                        stringBuilder.Append($"\n(Instancing)\t\tBatched Draw Calls: {GetCounterValueAsNumber(f, "Instanced Batched Draw Calls Count")} \tBatches: {GetCounterValueAsNumber(f, "Instanced Batches Count")} \tTriangles: {GetCounterValueAsNumber(f, "Instanced Batched Triangles Count")} \tVertices: {GetCounterValueAsNumber(f, "Instanced Batched Vertices Count")}");

                        stringBuilder.Append($"\nUsed Textures: {GetCounterValue(f, "Used Textures Count")} / {GetCounterValueAsBytes(f, "Used Textures Bytes")}");
                        stringBuilder.Append($"\nRender Textures: {GetCounterValue(f, "Render Textures Count")} / {GetCounterValueAsBytes(f, "Render Textures Bytes")}");
                        stringBuilder.Append($"\nRender Textures Changes: {GetCounterValue(f, "Render Textures Changes Count")}");

                        stringBuilder.Append($"\nUsed Buffers: {GetCounterValue(f, "Used Buffers Count")} / {GetCounterValueAsBytes(f, "Used Buffers Bytes")}");
                        stringBuilder.Append($"\nVertex Buffer Upload In Frame: {GetCounterValue(f, "Vertex Buffer Upload In Frame Count")} / {GetCounterValueAsBytes(f, "Vertex Buffer Upload In Frame Bytes")}");
                        stringBuilder.Append($"\nIndex Buffer Upload In Frame: {GetCounterValue(f, "Index Buffer Upload In Frame Count")} / {GetCounterValueAsBytes(f, "Index Buffer Upload In Frame Bytes")}");

                        stringBuilder.Append($"\nShadow Casters: {GetCounterValue(f, "Shadow Casters Count")}\n");

                        activeText = stringBuilder.ToString();
                    }
                    else
                    {
                        // Old data compatibility.
                        activeText = ProfilerDriver.GetOverviewText(ProfilerArea.Rendering, ProfilerWindow.GetActiveVisibleFrameIndex());
                    }
                }
            }
            float height = EditorStyles.wordWrappedLabel.CalcHeight(GUIContent.Temp(activeText), position.width);

            m_PaneScroll = GUILayout.BeginScrollView(m_PaneScroll, ProfilerWindow.Styles.background);
            EditorGUILayout.SelectableLabel(activeText, EditorStyles.wordWrappedLabel, GUILayout.MinHeight(height));
            GUILayout.EndScrollView();
        }
    /// <summary>
    /// 打印内存数据
    /// </summary>
    void PrintMemoryData()
    {
        var parent        = Directory.GetParent(Application.dataPath);
        var directoryPath = parent.FullName + "/ProfilerData";

        if (!Directory.Exists(directoryPath))
        {
            Directory.CreateDirectory(directoryPath);
        }

        var outputPath = string.Format("{0}/ProfilerDetailed{1:yyyy_MM_dd_HH_mm_ss}.txt", directoryPath, DateTime.Now);

        File.Create(outputPath).Dispose();
        if (null != memoryElement)
        {
            var writer = new StreamWriter(outputPath);
            ProfilerWindow.WriteMemoryDetail(writer, memoryElement);
            writer.Flush();
            writer.Close();
        }

        Process.Start(outputPath);
    }
Exemplo n.º 18
0
    private void ExtractMemory(float memSize, int memDepth)
    {
        var filterSize = memSize * 1024 * 1024;
        var parent     = Directory.GetParent(Application.dataPath);
        var outputPath = string.Format("{0}/MemoryDetailed{1:yyyy_MM_dd_HH_mm_ss}.txt", parent.FullName, DateTime.Now);

        File.Create(outputPath).Dispose();
        _memoryElementRoot = ProfilerWindow.GetMemoryDetailRoot(memDepth, filterSize);

        if (null != _memoryElementRoot)
        {
            var writer = new StreamWriter(outputPath);
            writer.WriteLine("Memory Size: >= {0}MB", _memorySize);
            writer.WriteLine("Memory Depth: {0}", _memoryDepth);
            writer.WriteLine("Current Target: {0}", ProfilerDriver.GetConnectionIdentifier(ProfilerDriver.connectedProfiler));
            writer.WriteLine("**********************");
            ProfilerWindow.WriteMemoryDetail(writer, _memoryElementRoot);
            writer.Flush();
            writer.Close();
        }

        Process.Start(outputPath);
    }
Exemplo n.º 19
0
        public void GetProfilerWindowHandle()
        {
            Profiler.BeginSample("GetProfilerWindowHandle");
#if UNITY_2021_1_OR_NEWER
            if (m_CpuProfilerModule != null)
            {
                m_CpuProfilerModule.selectionChanged -= OnSelectionChangedInCpuProfilerModule;
                m_CpuProfilerModule = null;
            }

            var windows = Resources.FindObjectsOfTypeAll <ProfilerWindow>();
            if (windows != null && windows.Length > 0)
            {
                m_ProfilerWindow = windows[0];
            }
            if (m_ProfilerWindow != null)
            {
                m_CpuProfilerModule =
                    m_ProfilerWindow.GetFrameTimeViewSampleSelectionController(ProfilerWindow.cpuModuleName);
                m_CpuProfilerModule.selectionChanged -= OnSelectionChangedInCpuProfilerModule;
                m_CpuProfilerModule.selectionChanged += OnSelectionChangedInCpuProfilerModule;

                m_ProfilerWindow.Repaint();
                m_ProfilerWindowInitialized = false;
                // wait a frame for the Profiler to get Repainted
                EditorApplication.delayCall += () => m_ProfilerWindowInitialized = true;
            }
#else
            UnityEngine.Object[] windows = Resources.FindObjectsOfTypeAll(m_ProfilerWindowType);
            if (windows != null && windows.Length > 0)
            {
                m_ProfilerWindow = (EditorWindow)windows[0];
            }
            m_ProfilerWindowInitialized = true;
#endif
            Profiler.EndSample();
        }
Exemplo n.º 20
0
        public override void CreateProfiler(ProfilerConfig config, int enabledTimeRulerLevels, int enabledPerformanceGraphLevels, int enabledProfilerSummaryLevels)
        {
            if (CreateUI == false)
            {
                return;
            }

            _profilerConfig = config;

            _profilerWindowViewModel = new ProfilerWindowViewModel(config.TimeRulerConfig.VisibleLevelsFlags, config.PerformanceGraphConfig.VisibleLevelsFlags, config.ProfilerSummaryConfig.VisibleLevelsFlags);
            _profilerWindowViewModel.ProfilerLevelChanged += (sender, args) =>
            {
                OnLevelItemChanged(new LevelItemChangedEventArgs(args.Key, args.LevelId, args.Enabled));
            };

            _profilerWindow = new ProfilerWindow {
                DataContext = _profilerWindowViewModel, Padding = _windowPadding
            };
            _profilerWindow.SizeChanged += (sender, args) =>
            {
                _profilerConfig.Width  = _profilerWindow.ActualWidth;
                _profilerConfig.Height = _profilerWindow.ActualHeight;
            };

            var profilerTemplate = new DataTemplate(typeof(ProfilerWindowViewModel), parent =>
            {
                _profilerWindow.Parent = parent;
                return(_profilerWindow);
            });

            _gearsetUI.Resources.Add(profilerTemplate.DataTemplateKey, profilerTemplate);

            InitialiseWindow(_profilerWindowViewModel, config.Top, config.Left, config.Width, config.Height, config.Visible);

            _widgetWindowViewModel.ProfilerWindowVisible = config.Visible;
        }
Exemplo n.º 21
0
 private static void TakeSample()
 {
     ProfilerWindow.RefreshMemoryData();
 }
 public StandardDetailsViewController(ProfilerWindow profilerWindow, ProfilerCounterDescriptor[] counters) : base(profilerWindow)
 {
     m_Counters = counters;
 }
    void OnGUI()
    {
        if (headStyle == null)
        {
            headStyle                  = new GUIStyle();
            headStyle.fontSize         = 15;
            headStyle.alignment        = TextAnchor.MiddleCenter;
            headStyle.normal.textColor = new Color(0.8f, 0.8f, 0.8f);
        }

        EditorGUILayout.BeginHorizontal();
        EditorGUILayout.BeginVertical();
        EditorGUILayout.LabelField("注意取哪类数据时,请将Profiler切换到对应面板", EditorStyles.whiteLabel);

        // 采样一帧CPU 或 GPU 详细数据
        sampleFrame = EditorGUILayout.IntSlider("Sample Current Frame", sampleFrame, ProfilerDriver.firstFrameIndex + 1, ProfilerDriver.lastFrameIndex - 2);
        EditorGUILayout.BeginHorizontal();
        // 采样CPU
        if (GUILayout.Button("Sample CPU"))
        {
            ProfilerWindow.SetCurrentFrame(sampleFrame - 1);
            PrintDatas("CPU");
        }
        // 采样GPU
        if (GUILayout.Button("Sample GPU"))
        {
            ProfilerWindow.SetCurrentFrame(sampleFrame - 1);
            PrintDatas("GPU");
        }

        EditorGUILayout.EndHorizontal();
        EditorGUILayout.Space();
        EditorGUILayout.LabelField("Memory Filter(Save in the same directory as Assets)", EditorStyles.whiteLargeLabel);
        // 内存过滤条件
        memorySize  = EditorGUILayout.FloatField("Memory Size(MB) >= ", memorySize);
        memoryDepth = EditorGUILayout.IntField("Memory Depth(>=1)", memoryDepth);
        // 采集内存快照
        if (GUILayout.Button("Get Memory Data(One Frame)"))
        {
            if (memoryDepth <= 0)
            {
                memoryDepth = 1;
            }
            ProfilerWindow.RefreshMemoryData();
            ExtractMemory(memoryDepth, memorySize);
        }

        EditorGUILayout.Space();
        EditorGUILayout.LabelField("所选区间内CPU耗时超过以下ms,绘制图像显示占用比例(每次改数值后要重新绘制)", EditorStyles.whiteLabel);
        EditorGUILayout.BeginHorizontal();
        timeThreshold[0] = EditorGUILayout.FloatField("CPU耗时 >", timeThreshold[0]);
        timeThreshold[1] = EditorGUILayout.FloatField("CPU耗时 >", timeThreshold[1]);
        EditorGUILayout.EndHorizontal();
        EditorGUILayout.BeginHorizontal();
        timeThreshold[2] = EditorGUILayout.FloatField("CPU耗时 >", timeThreshold[2]);
        timeThreshold[3] = EditorGUILayout.FloatField("CPU耗时 >", timeThreshold[3]);
        EditorGUILayout.EndHorizontal();
        if (GUILayout.Button("Test"))
        {
            var list = ProfilerWindow.HighUsedFunc(beginFrame, endFrame, 100);
            Debug.Log(list.Count);
            Debug.Log(list[0].Count);
        }

        EditorGUILayout.EndVertical();
        EditorGUILayout.BeginVertical();
        // 采样一段时间内的CPU 和 GPU数据
        EditorGUILayout.LabelField("Sample a piece of data", EditorStyles.whiteLargeLabel);
        beginFrame = EditorGUILayout.IntSlider("Begin Frame", beginFrame, ProfilerDriver.firstFrameIndex + 1, ProfilerDriver.lastFrameIndex - 2);
        endFrame   = EditorGUILayout.IntSlider("End Frame", endFrame, ProfilerDriver.firstFrameIndex + 1, ProfilerDriver.lastFrameIndex - 2);
        EditorGUILayout.Space();
        targetName = EditorGUILayout.TextField("目标区域/函数名: ", targetName);
        // 选择采集的数据
        EditorGUILayout.LabelField("选择采集的数据", EditorStyles.whiteLabel);
        isSampleCPU        = EditorGUILayout.Toggle("CPU", isSampleCPU);
        isSampleGPU        = EditorGUILayout.Toggle("GPU", isSampleGPU);
        isSampleGC         = EditorGUILayout.Toggle("GC", isSampleGC);
        isSampleFuncDetail = EditorGUILayout.Toggle("FunctionDetail", isSampleFuncDetail);
        EditorGUILayout.BeginHorizontal();
        isPrintHighUsedFunc = EditorGUILayout.Toggle("PrintHighUsedFunc", isPrintHighUsedFunc);
        highFuncPorprotion  = EditorGUILayout.FloatField("打印高耗时函数 >(%) ", highFuncPorprotion);
        EditorGUILayout.EndHorizontal();
        if (GUILayout.Button("Save Data And Draw(begin - end)"))
        {
            SampleData(beginFrame, endFrame);
        }

        if (GUILayout.Button("Save Data And Draw(min - max)"))
        {
            SampleData(ProfilerDriver.firstFrameIndex + 1, ProfilerDriver.lastFrameIndex - 2);
        }

        if (GUILayout.Button("Clear Data"))
        {
            ClearAllData();
        }

        EditorGUILayout.EndVertical();
        EditorGUILayout.EndHorizontal();

        if (dataList.Count > 0)
        {
            DrawGraph();
        }

        HandleEvent();
    }
Exemplo n.º 24
0
        void DrawNetworkOperationsPane(Rect position)
        {
            SplitterGUILayout.BeginHorizontalSplit(m_NetworkSplit);
            var overviewLabel = GUIContent.Temp(ProfilerDriver.GetOverviewText(area,
                                                                               ProfilerWindow.GetActiveVisibleFrameIndex()));
            var labelRect = GUILayoutUtility.GetRect(overviewLabel, EditorStyles.wordWrappedLabel);

            GUI.Label(labelRect, overviewLabel, EditorStyles.wordWrappedLabel);

            m_PaneScroll = GUILayout.BeginScrollView(m_PaneScroll, ProfilerWindow.Styles.background);

            EditorGUILayout.BeginHorizontal(EditorStyles.toolbar);
            EditorGUILayout.LabelField("Operation Detail");
            EditorGUILayout.LabelField("Over 5 Ticks");
            EditorGUILayout.LabelField("Over 10 Ticks");
            EditorGUILayout.LabelField("Total");
            EditorGUILayout.EndHorizontal();

            EditorGUI.indentLevel += 1;

            for (short msgId = 0; msgId < msgNames.Length; msgId++)
            {
#pragma warning disable CS0618
                if (!NetworkDetailStats.m_NetworkOperations.ContainsKey(msgId))
#pragma warning restore
                {
                    continue;
                }

                msgFoldouts[msgId] = EditorGUILayout.Foldout(msgFoldouts[msgId], msgNames[msgId] + ":");
                if (msgFoldouts[msgId])
                {
                    EditorGUILayout.BeginVertical();
#pragma warning disable CS0618
                    var detail = NetworkDetailStats.m_NetworkOperations[msgId];
#pragma warning restore

                    EditorGUI.indentLevel += 1;

                    foreach (var entryName in detail.m_Entries.Keys)
                    {
                        int tick  = (int)Time.time;
                        var entry = detail.m_Entries[entryName];

                        if (entry.m_IncomingTotal > 0)
                        {
                            EditorGUILayout.BeginHorizontal();
                            EditorGUILayout.LabelField("IN:" + entryName);
                            EditorGUILayout.LabelField(entry.m_IncomingSequence.GetFiveTick(tick).ToString());
                            EditorGUILayout.LabelField(entry.m_IncomingSequence.GetTenTick(tick).ToString());
                            EditorGUILayout.LabelField(entry.m_IncomingTotal.ToString());
                            EditorGUILayout.EndHorizontal();
                        }

                        if (entry.m_OutgoingTotal > 0)
                        {
                            EditorGUILayout.BeginHorizontal();
                            EditorGUILayout.LabelField("OUT:" + entryName);
                            EditorGUILayout.LabelField(entry.m_OutgoingSequence.GetFiveTick(tick).ToString());
                            EditorGUILayout.LabelField(entry.m_OutgoingSequence.GetTenTick(tick).ToString());
                            EditorGUILayout.LabelField(entry.m_OutgoingTotal.ToString());
                            EditorGUILayout.EndHorizontal();
                        }
                    }

                    EditorGUI.indentLevel -= 1;
                    EditorGUILayout.EndVertical();
                }
            }
            EditorGUI.indentLevel -= 1;
            GUILayout.EndScrollView();
            SplitterGUILayout.EndHorizontalSplit();

            // Draw separator
            var lineRect = new Rect(m_NetworkSplit.realSizes[0] + labelRect.xMin, position.y - EditorGUI.kWindowToolbarHeight - 1, 1,
                                    position.height + EditorGUI.kWindowToolbarHeight);
            EditorGUI.DrawRect(lineRect, s_SeparatorColor);
        }
Exemplo n.º 25
0
        public override void DrawDetailsView(Rect position)
        {
            m_PaneScroll = GUILayout.BeginScrollView(m_PaneScroll, ProfilerWindow.Styles.background);

            using (var frameData = ProfilerDriver.GetRawFrameDataView(ProfilerWindow.GetActiveVisibleFrameIndex(), 0))
            {
                if (frameData.valid)
                {
                    // Initialize the profiler markers.
                    InitializeMarkers(frameData);

                    bool newCountersAvailable = GetPhysicsCounterValue(frameData, "Total Queries") != -1;

                    if (m_ShowStatsView == PhysicsProfilerStatsView.Current)
                    {
                        // Determine if the new counters are available by looking for a counter only available there.
                        if (newCountersAvailable)
                        {
                            // Draw an alternate lined background to make following metrics on the same line easier.
                            DrawAlternateBackground(position, m_PaneScroll, 10);

                            long physicsMemoryUsed = GetCounterValue(frameData, "Physics Used Memory (2D)");
                            long totalUsedMemory   = GetCounterValue(frameData, "Total Used Memory");
                            EditorGUILayout.BeginHorizontal();
                            EditorGUILayout.LabelField("Physics Used Memory", GUILayout.Width(k_labelWidthTitle));
                            EditorGUILayout.LabelField("| Total: " + GetCounterValueAsBytes(frameData, "Physics Used Memory (2D)"), GUILayout.Width(k_labelWidthDetail));
                            EditorGUILayout.LabelField(string.Format("| Relative: {0:p2}", (float)physicsMemoryUsed / (float)totalUsedMemory), GUILayout.Width(k_labelWidthDetail));
                            EditorGUILayout.EndHorizontal();

                            EditorGUILayout.BeginHorizontal();
                            EditorGUILayout.LabelField("Bodies", GUILayout.Width(k_labelWidthTitle));
                            EditorGUILayout.LabelField("| Total: " + GetPhysicsCounterValue(frameData, "Total Bodies"), GUILayout.Width(k_labelWidthDetail));
                            EditorGUILayout.LabelField("| Awake: " + GetPhysicsCounterValue(frameData, "Awake Bodies"), GUILayout.Width(k_labelWidthDetail));
                            EditorGUILayout.LabelField("| Asleep: " + GetPhysicsCounterValue(frameData, "Asleep Bodies"), GUILayout.Width(k_labelWidthDetail));
                            EditorGUILayout.LabelField("| Dynamic: " + GetPhysicsCounterValue(frameData, "Dynamic Bodies"), GUILayout.Width(k_labelWidthDetail));
                            EditorGUILayout.LabelField("| Kinematic: " + GetPhysicsCounterValue(frameData, "Kinematic Bodies"), GUILayout.Width(k_labelWidthDetail));
                            EditorGUILayout.LabelField("| Static: " + GetPhysicsCounterValue(frameData, "Static Bodies"), GUILayout.Width(k_labelWidthDetail));
                            EditorGUILayout.LabelField("| Discrete: " + GetPhysicsCounterValue(frameData, "Discrete Bodies"), GUILayout.Width(k_labelWidthDetail));
                            EditorGUILayout.LabelField("| Continuous: " + GetPhysicsCounterValue(frameData, "Continuous Bodies"), GUILayout.Width(k_labelWidthDetail));
                            EditorGUILayout.EndHorizontal();

                            EditorGUILayout.BeginHorizontal();
                            EditorGUILayout.LabelField("Shapes", GUILayout.Width(k_labelWidthTitle));
                            EditorGUILayout.LabelField("| Total: " + GetPhysicsCounterValue(frameData, "Total Shapes"), GUILayout.Width(k_labelWidthDetail));
                            EditorGUILayout.LabelField("| Awake: " + GetPhysicsCounterValue(frameData, "Awake Shapes"), GUILayout.Width(k_labelWidthDetail));
                            EditorGUILayout.LabelField("| Asleep: " + GetPhysicsCounterValue(frameData, "Asleep Shapes"), GUILayout.Width(k_labelWidthDetail));
                            EditorGUILayout.LabelField("| Dynamic: " + GetPhysicsCounterValue(frameData, "Dynamic Shapes"), GUILayout.Width(k_labelWidthDetail));
                            EditorGUILayout.LabelField("| Kinematic: " + GetPhysicsCounterValue(frameData, "Kinematic Shapes"), GUILayout.Width(k_labelWidthDetail));
                            EditorGUILayout.LabelField("| Static: " + GetPhysicsCounterValue(frameData, "Static Shapes"), GUILayout.Width(k_labelWidthDetail));
                            EditorGUILayout.EndHorizontal();

                            EditorGUILayout.BeginHorizontal();
                            EditorGUILayout.LabelField("Queries", GUILayout.Width(k_labelWidthTitle));
                            EditorGUILayout.LabelField("| Total: " + GetPhysicsCounterValue(frameData, "Total Queries"), GUILayout.Width(k_labelWidthDetail));
                            EditorGUILayout.LabelField("| Raycast: " + GetPhysicsCounterValue(frameData, "Raycast Queries"), GUILayout.Width(k_labelWidthDetail));
                            EditorGUILayout.LabelField("| Shapecast: " + GetPhysicsCounterValue(frameData, "Shapecast Queries"), GUILayout.Width(k_labelWidthDetail));
                            EditorGUILayout.LabelField("| Overlap: " + GetPhysicsCounterValue(frameData, "Overlap Queries"), GUILayout.Width(k_labelWidthDetail));
                            EditorGUILayout.LabelField("| IsTouching: " + GetPhysicsCounterValue(frameData, "IsTouching Queries"), GUILayout.Width(k_labelWidthDetail));
                            EditorGUILayout.LabelField("| GetContacts: " + GetPhysicsCounterValue(frameData, "GetContacts Queries"), GUILayout.Width(k_labelWidthDetail));
                            EditorGUILayout.LabelField("| Particle: " + GetPhysicsCounterValue(frameData, "Particle Queries"), GUILayout.Width(k_labelWidthDetail));
                            EditorGUILayout.EndHorizontal();

                            EditorGUILayout.BeginHorizontal();
                            EditorGUILayout.LabelField("Contacts", GUILayout.Width(k_labelWidthTitle));
                            EditorGUILayout.LabelField("| Total: " + GetPhysicsCounterValue(frameData, "Total Contacts"), GUILayout.Width(k_labelWidthDetail));
                            EditorGUILayout.LabelField("| Added: " + GetPhysicsCounterValue(frameData, "Added Contacts"), GUILayout.Width(k_labelWidthDetail));
                            EditorGUILayout.LabelField("| Removed: " + GetPhysicsCounterValue(frameData, "Removed Contacts"), GUILayout.Width(k_labelWidthDetail));
                            EditorGUILayout.LabelField("| Broadphase Updates: " + GetPhysicsCounterValue(frameData, "Broadphase Updates"), GUILayout.Width(k_labelWidthDetail));
                            EditorGUILayout.LabelField("| Broadphase Pairs: " + GetPhysicsCounterValue(frameData, "Broadphase Pairs"), GUILayout.Width(k_labelWidthDetail));
                            EditorGUILayout.EndHorizontal();

                            EditorGUILayout.BeginHorizontal();
                            EditorGUILayout.LabelField("Callbacks", GUILayout.Width(k_labelWidthTitle));
                            EditorGUILayout.LabelField("| Total: " + GetPhysicsCounterValue(frameData, "Total Callbacks"), GUILayout.Width(k_labelWidthDetail));
                            EditorGUILayout.LabelField("| Collision Enter: " + GetPhysicsCounterValue(frameData, "Collision Enter"), GUILayout.Width(k_labelWidthDetail));
                            EditorGUILayout.LabelField("| Collision Stay: " + GetPhysicsCounterValue(frameData, "Collision Stay"), GUILayout.Width(k_labelWidthDetail));
                            EditorGUILayout.LabelField("| Collision Exit: " + GetPhysicsCounterValue(frameData, "Collision Exit"), GUILayout.Width(k_labelWidthDetail));
                            EditorGUILayout.LabelField("| Trigger Enter: " + GetPhysicsCounterValue(frameData, "Trigger Enter"), GUILayout.Width(k_labelWidthDetail));
                            EditorGUILayout.LabelField("| Trigger Stay: " + GetPhysicsCounterValue(frameData, "Trigger Stay"), GUILayout.Width(k_labelWidthDetail));
                            EditorGUILayout.LabelField("| Trigger Exit: " + GetPhysicsCounterValue(frameData, "Trigger Exit"), GUILayout.Width(k_labelWidthDetail));
                            EditorGUILayout.EndHorizontal();

                            EditorGUILayout.BeginHorizontal();
                            EditorGUILayout.LabelField("Solver", GUILayout.Width(k_labelWidthTitle));
                            EditorGUILayout.LabelField("| World Count: " + GetPhysicsCounterValue(frameData, "Solver World Count"), GUILayout.Width(k_labelWidthDetail));
                            EditorGUILayout.LabelField("| Simulation Count: " + GetPhysicsCounterValue(frameData, "Solver Simulation Count"), GUILayout.Width(k_labelWidthDetail));
                            EditorGUILayout.LabelField("| Discrete Islands: " + GetPhysicsCounterValue(frameData, "Solver Discrete Islands"), GUILayout.Width(k_labelWidthDetail));
                            EditorGUILayout.LabelField("| Continuous Islands: " + GetPhysicsCounterValue(frameData, "Solver Continuous Islands"), GUILayout.Width(k_labelWidthDetail));
                            EditorGUILayout.EndHorizontal();

                            EditorGUILayout.BeginHorizontal();
                            EditorGUILayout.LabelField("Transform Sync", GUILayout.Width(k_labelWidthTitle));
                            EditorGUILayout.LabelField("| Sync Calls: " + GetPhysicsCounterValue(frameData, "Total Transform Sync Calls"), GUILayout.Width(k_labelWidthDetail));
                            EditorGUILayout.LabelField("| Sync Bodies: " + GetPhysicsCounterValue(frameData, "Transform Sync Bodies"), GUILayout.Width(k_labelWidthDetail));
                            EditorGUILayout.LabelField("| Sync Colliders: " + GetPhysicsCounterValue(frameData, "Transform Sync Colliders"), GUILayout.Width(k_labelWidthDetail));
                            EditorGUILayout.LabelField("| Parent Sync Bodies: " + GetPhysicsCounterValue(frameData, "Transform Parent Sync Bodies"), GUILayout.Width(k_labelWidthDetail));
                            EditorGUILayout.LabelField("| Parent Sync Colliders: " + GetPhysicsCounterValue(frameData, "Transform Parent Sync Colliders"), GUILayout.Width(k_labelWidthDetail));
                            EditorGUILayout.EndHorizontal();

                            EditorGUILayout.BeginHorizontal();
                            EditorGUILayout.LabelField("Joints", GUILayout.Width(k_labelWidthTitle));
                            EditorGUILayout.LabelField("| Total: " + GetPhysicsCounterValue(frameData, "Total Joints"), GUILayout.Width(k_labelWidthDetail));
                            EditorGUILayout.EndHorizontal();

                            EditorGUILayout.BeginHorizontal();
                            EditorGUILayout.LabelField("Timings", GUILayout.Width(k_labelWidthTitle));
                            EditorGUILayout.LabelField("| Sim: " + GetPhysicsSampleData(frameData, "Physics2D.Simulate"), GUILayout.Width(k_labelWidthDetail));
                            EditorGUILayout.LabelField("| Sync: " + GetPhysicsSampleData(frameData, "Physics2D.SyncTransformChanges"), GUILayout.Width(k_labelWidthDetail));
                            EditorGUILayout.LabelField("| Step: " + GetPhysicsSampleData(frameData, "Physics2D.Step"), GUILayout.Width(k_labelWidthDetail));
                            EditorGUILayout.LabelField("| Write: " + GetPhysicsSampleData(frameData, "Physics2D.UpdateTransforms"), GUILayout.Width(k_labelWidthDetail));
                            EditorGUILayout.LabelField("| Callbacks: " + GetPhysicsSampleData(frameData, "Physics2D.CompileContactCallbacks"), GUILayout.Width(k_labelWidthDetail));
                            EditorGUILayout.EndHorizontal();
                        }
                        else
                        {
                            EditorGUILayout.LabelField("Current Data not Available.");
                        }
                    }
                    else
                    {
                        // Determine if the old counters are available by looking for a counter only available there.
                        if (!newCountersAvailable)
                        {
                            // Old data compatibility.
                            var activeText = ProfilerDriver.GetOverviewText(ProfilerArea.Physics2D, ProfilerWindow.GetActiveVisibleFrameIndex());
                            var height     = EditorStyles.wordWrappedLabel.CalcHeight(GUIContent.Temp(activeText), position.width);
                            EditorGUILayout.SelectableLabel(activeText, EditorStyles.wordWrappedLabel, GUILayout.MinHeight(height));
                        }
                        else
                        {
                            EditorGUILayout.LabelField("Legacy Data not Available.");
                        }
                    }
                }
            }

            GUILayout.EndScrollView();
        }
 /// <summary>
 /// 应用程序当前状态的快照
 /// </summary>
 void ExtractMemory(int depth, float size)
 {
     memoryElement = ProfilerWindow.GetMemoryDetail(depth, size * 1024 * 1024);
     PrintMemoryData();
 }
 public override void DrawDetailsView(Rect position)
 {
     if (NetworkingMessagesProfilerOverrides.drawDetailsViewOverride != null)
     {
         NetworkingMessagesProfilerOverrides.drawDetailsViewOverride.Invoke(position, ProfilerWindow.GetActiveVisibleFrameIndex());
     }
     else
     {
         DrawDetailsViewText(position);
     }
 }
 public AdaptivePerformanceDetailsViewController(ProfilerWindow profilerWindow) : base(profilerWindow)
 {
 }
Exemplo n.º 29
0
        /// <inheritdoc />
        public override void OnInit()
        {
            Assert.IsNull(MainWindow);

            _windowsLayoutPath = StringUtils.CombinePaths(Globals.ProjectCacheFolder, "WindowsLayout.xml");

            // Create main window
            var dpiScale = Platform.DpiScale;
            var settings = CreateWindowSettings.Default;

            settings.Title               = "Flax Editor";
            settings.Size                = Platform.DesktopSize;
            settings.StartPosition       = WindowStartPosition.CenterScreen;
            settings.ShowAfterFirstPaint = true;

#if PLATFORM_WINDOWS
            if (!Editor.Instance.Options.Options.Interface.UseNativeWindowSystem)
#endif
            {
                settings.HasBorder = false;
#if PLATFORM_WINDOWS
                // Skip OS sizing frame and implement it using LeftButtonHit
                settings.HasSizingFrame = false;
#endif
            }

            MainWindow = Platform.CreateWindow(ref settings);

            if (MainWindow == null)
            {
                // Error
                Editor.LogError("Failed to create editor main window!");
                return;
            }
            UpdateWindowTitle();

            // Link for main window events
            MainWindow.Closing += MainWindow_OnClosing;
            MainWindow.Closed  += MainWindow_OnClosed;

            // Create default editor windows
            ContentWin              = new ContentWindow(Editor);
            EditWin                 = new EditGameWindow(Editor);
            GameWin                 = new GameWindow(Editor);
            PropertiesWin           = new PropertiesWindow(Editor);
            SceneWin                = new SceneTreeWindow(Editor);
            DebugLogWin             = new DebugLogWindow(Editor);
            OutputLogWin            = new OutputLogWindow(Editor);
            ToolboxWin              = new ToolboxWindow(Editor);
            GraphicsQualityWin      = new GraphicsQualityWindow(Editor);
            GameCookerWin           = new GameCookerWindow(Editor);
            ProfilerWin             = new ProfilerWindow(Editor);
            EditorOptionsWin        = new EditorOptionsWindow(Editor);
            PluginsWin              = new PluginsWindow(Editor);
            VisualScriptDebuggerWin = new VisualScriptDebuggerWindow(Editor);

            // Bind events
            Level.SceneSaveError             += OnSceneSaveError;
            Level.SceneLoaded                += OnSceneLoaded;
            Level.SceneLoadError             += OnSceneLoadError;
            Level.SceneLoading               += OnSceneLoading;
            Level.SceneSaved                 += OnSceneSaved;
            Level.SceneSaving                += OnSceneSaving;
            Level.SceneUnloaded              += OnSceneUnloaded;
            Level.SceneUnloading             += OnSceneUnloading;
            ScriptsBuilder.ScriptsReloadEnd  += OnScriptsReloadEnd;
            Editor.StateMachine.StateChanged += OnEditorStateChanged;
        }
Exemplo n.º 30
0
 public LegacyDetailsViewController(ProfilerWindow profilerWindow, ProfilerModuleBase module) : base(profilerWindow)
 {
     m_Module = module;
 }