// Used with via Reflection (see MemoryProfilerModuleBridge.cs) from the Profiler Memory Profiler Package for the Memory Profiler Module UI Override. // (Only until the package fully replaces all workflows afforded by this view, at which point the details view will just not be available from the package override UI anymore) void DrawDetailedMemoryPane() { SplitterGUILayout.BeginHorizontalSplit(m_ViewSplit); m_MemoryListView.OnGUI(); m_ReferenceListView.OnGUI(); SplitterGUILayout.EndHorizontalSplit(); }
void DoUpdateReportArea( UpdateReportListView updateReportListView, object splitterState) { SplitterGUILayout.BeginHorizontalSplit(splitterState); DoUpdateReportViewArea(updateReportListView); DoErrorDetailsTextArea(updateReportListView.GetSelectedError()); SplitterGUILayout.EndHorizontalSplit(); }
public void DoGUI(FrameDataView frameDataView) { this.InitIfNeeded(); bool flag = frameDataView != null && frameDataView.IsValid(); this.m_TreeView.SetFrameDataView(frameDataView); bool flag2 = flag && this.m_DetailedViewType != ProfilerFrameDataHierarchyView.DetailedViewType.None; if (flag2) { SplitterGUILayout.BeginHorizontalSplit(this.m_DetailedViewSpliterState, new GUILayoutOption[0]); } GUILayout.BeginVertical(new GUILayoutOption[0]); this.DrawToolbar(frameDataView, flag2); if (!flag) { GUILayout.Label(ProfilerFrameDataViewBase.BaseStyles.noData, ProfilerFrameDataViewBase.BaseStyles.label, new GUILayoutOption[0]); } else { Rect rect = GUILayoutUtility.GetRect(GUIContent.none, GUIStyle.none, new GUILayoutOption[] { GUILayout.ExpandHeight(true), GUILayout.ExpandHeight(true) }); this.m_TreeView.OnGUI(rect); } GUILayout.EndVertical(); if (flag2) { GUILayout.BeginVertical(new GUILayoutOption[0]); EditorGUILayout.BeginHorizontal(ProfilerFrameDataViewBase.BaseStyles.toolbar, new GUILayoutOption[0]); this.DrawDetailedViewPopup(); GUILayout.FlexibleSpace(); EditorGUILayout.EndHorizontal(); ProfilerFrameDataHierarchyView.DetailedViewType detailedViewType = this.m_DetailedViewType; if (detailedViewType != ProfilerFrameDataHierarchyView.DetailedViewType.Objects) { if (detailedViewType == ProfilerFrameDataHierarchyView.DetailedViewType.CallersAndCallees) { this.detailedCallsView.DoGUI(ProfilerFrameDataViewBase.BaseStyles.header, frameDataView, this.m_TreeView.GetSelection()); } } else { this.detailedObjectsView.DoGUI(ProfilerFrameDataViewBase.BaseStyles.header, frameDataView, this.m_TreeView.GetSelection()); } GUILayout.EndVertical(); SplitterGUILayout.EndHorizontalSplit(); } this.HandleKeyboardEvents(); }
void DoListArea( UpdateReportListView errorsListView, object splitterState) { EditorGUILayout.BeginVertical(); SplitterGUILayout.BeginHorizontalSplit(splitterState); DoErrorsListViewArea(errorsListView); DoErrorDetailsTextArea(errorsListView.GetSelectedError()); SplitterGUILayout.EndHorizontalSplit(); EditorGUILayout.EndVertical(); }
public void OnGUI() { if (!m_Enabled) { Enable(); } if (BuildPipeline.isBuildingPlayer) { m_IsBuilding = true; } else if (m_IsBuilding) { m_IsBuilding = false; Repaint(); } EditorGUILayout.BeginHorizontal(); GUILayout.FlexibleSpace(); var selectedIndex = m_TestTypeToolbarIndex; m_TestTypeToolbarIndex = GUILayout.Toolbar(m_TestTypeToolbarIndex, Enum.GetNames(typeof(TestRunnerMenuLabels)), "LargeButton", UnityEngine.GUI.ToolbarButtonSize.FitToContents); GUILayout.FlexibleSpace(); EditorGUILayout.EndHorizontal(); if (selectedIndex != m_TestTypeToolbarIndex) { SelectTestListGUI(m_TestTypeToolbarIndex); StartRetrieveTestList(); } EditorGUILayout.BeginVertical(); using (new EditorGUI.DisabledScope(EditorApplication.isPlayingOrWillChangePlaymode)) { m_SelectedTestTypes.PrintHeadPanel(); } EditorGUILayout.EndVertical(); if (m_Settings.verticalSplit) { SplitterGUILayout.BeginVerticalSplit(m_Spl); } else { SplitterGUILayout.BeginHorizontalSplit(m_Spl); } EditorGUILayout.BeginVertical(); EditorGUILayout.BeginVertical(Styles.testList); m_SelectedTestTypes.RenderTestList(); EditorGUILayout.EndVertical(); EditorGUILayout.EndVertical(); m_SelectedTestTypes.RenderDetails(); if (m_Settings.verticalSplit) { SplitterGUILayout.EndVerticalSplit(); } else { SplitterGUILayout.EndHorizontalSplit(); } }
public void OnGUI() { using (new AnimatorControllerTool.ScopedPreventWarnings(this.previewAnimator)) { EventType type = Event.current.type; int button = Event.current.button; base.autoRepaintOnSceneChange = true; if (AnimatorControllerTool.s_Styles == null) { AnimatorControllerTool.s_Styles = new AnimatorControllerTool.Styles(); } this.OnControllerChange(); BlendTreeInspector.currentController = this.m_AnimatorController; BlendTreeInspector.currentAnimator = this.m_PreviewAnimator; if (this.miniTool) { Rect paneRect = new Rect(0f, 0f, base.position.width, base.position.height); this.OnGUIGraph(paneRect); } else { if (this.m_VerticalSplitter == null || this.m_VerticalSplitter.realSizes.Length != 2) { this.m_VerticalSplitter = new SplitterState(new int[] { (int)(base.position.width * 0.25f), (int)(base.position.width * 0.75f) }, new int[] { 150, 100 }, null); } SplitterGUILayout.BeginHorizontalSplit(this.m_VerticalSplitter, new GUILayoutOption[] { GUILayout.ExpandWidth(true), GUILayout.ExpandHeight(true) }); SplitterGUILayout.EndHorizontalSplit(); int num = this.m_VerticalSplitter.realSizes[0]; int num2 = this.m_VerticalSplitter.realSizes[1]; Rect rect = new Rect(0f, 0f, (float)num, base.position.height); Rect paneRect2 = new Rect((float)num, 0f, (float)num2, base.position.height); Rect topToolBarRect = new Rect(rect.x, rect.y, rect.width, 17f); this.OnGUIEditorToolbar(topToolBarRect); Rect editorRect = new Rect(0f, 17f, rect.width, rect.height - 17f); this.OnGUIEditor(editorRect); if (Event.current.type == EventType.MouseDown && this.editor.HasKeyboardControl()) { this.editor.ReleaseKeyboardFocus(); } else if (this.activeGraphGUI != null && type == EventType.MouseDown && type != Event.current.type) { this.activeGraphGUI.ClearSelection(); } this.OnGUIGraph(paneRect2); } if (Event.current.type == EventType.MouseDown) { GUIUtility.keyboardControl = 0; EditorGUI.EndEditingActiveTextField(); } if (this.activeGraphGUI != null && type == EventType.MouseDown && button == 0 && this.activeGraphGUI.selection.Count == 0 && this.activeGraphGUI.edgeGUI.edgeSelection.Count == 0) { this.activeGraphGUI.DoBackgroundClickAction(); } } }
public void OnGUI() { // Make sure that editor options are synchronized BurstEditorOptions.EnsureSynchronized(); if (_targets == null) { _targets = BurstReflection.FindExecuteMethods(AssembliesType.Editor); foreach (var target in _targets) { // Enable burst compilation by default (override globals for the inspector) // This is not working as expected. This changes indirectly the global options while it shouldn't // Unable to explain how it can happen // so for now, if global enable burst compilation is disabled, then inspector is too //target.Options.EnableBurstCompilation = true; } // Order targets per name _targets.Sort((left, right) => string.Compare(left.GetDisplayName(), right.GetDisplayName(), StringComparison.Ordinal)); _treeView.Targets = _targets; _treeView.Reload(); if (_selectedItem != null) { _treeView.TrySelectByDisplayName(_selectedItem); } } if (_fontSizesText == null) { _fontSizesText = new string[FontSizes.Length]; for (var i = 0; i < FontSizes.Length; ++i) { _fontSizesText[i] = FontSizes[i].ToString(); } } if (_fontSizeIndex == -1) { _fontSizeIndex = EditorPrefs.GetInt(FontSizeIndexPref, 5); _fontSizeIndex = Math.Max(0, _fontSizeIndex); _fontSizeIndex = Math.Min(_fontSizeIndex, FontSizes.Length - 1); } if (_fixedFontStyle == null) { _fixedFontStyle = new GUIStyle(GUI.skin.label); string fontName; if (Application.platform == RuntimePlatform.WindowsEditor) { fontName = "Consolas"; } else { fontName = "Courier"; } CleanupFont(); _font = Font.CreateDynamicFontFromOSFont(fontName, FontSize); _fixedFontStyle.font = _font; _fixedFontStyle.fontSize = FontSize; } if (_searchField == null) { _searchField = new SearchField(); } if (_textArea == null) { _textArea = new LongTextArea(); } GUILayout.BeginHorizontal(); // SplitterGUILayout.BeginHorizontalSplit is internal in Unity but we don't have much choice SplitterGUILayout.BeginHorizontalSplit(TreeViewSplitterState); GUILayout.BeginVertical(GUILayout.Width(position.width / 3)); GUILayout.Label("Compile Targets", EditorStyles.boldLabel); var newFilter = _searchField.OnGUI(_treeView.Filter); if (newFilter != _treeView.Filter) { _treeView.Filter = newFilter; _treeView.Reload(); } _treeView.OnGUI(GUILayoutUtility.GetRect(GUIContent.none, GUIStyle.none, GUILayout.ExpandHeight(true), GUILayout.ExpandWidth(true))); GUILayout.EndVertical(); GUILayout.BeginVertical(); var selection = _treeView.GetSelection(); if (selection.Count == 1) { var targetIndex = selection[0]; var target = _targets[targetIndex - 1]; var targetOptions = target.Options; // Stash selected item name to handle domain reloads more gracefully _selectedItem = target.GetDisplayName(); // Refresh if any options are changed bool doCopy; int fontSize; // -14 to add a little bit of space for the vertical scrollbar to display correctly RenderButtonBars((position.width * 2) / 3 - 14, target, out doCopy, out fontSize); // We are currently formatting only Asm output var isTextFormatted = _enhancedDisassembly && _disasmKind == DisassemblyKind.Asm; // Depending if we are formatted or not, we don't render the same text var textToRender = isTextFormatted ? target.FormattedDisassembly : target.RawDisassembly; // Only refresh if we are switching to a new selection that hasn't been disassembled yet // Or we are changing disassembly settings (safety checks / enhanced disassembly) var targetRefresh = textToRender == null || target.DisassemblyKind != _disasmKind || targetOptions.EnableBurstSafetyChecks != _safetyChecks || target.TargetCpu != _targetCpu || target.IsDarkMode != EditorGUIUtility.isProSkin; bool targetChanged = _previousTargetIndex != targetIndex; _previousTargetIndex = targetIndex; if (targetRefresh) { // TODO: refactor this code with a proper AppendOption to avoid these "\n" var options = new StringBuilder(); target.TargetCpu = _targetCpu; target.DisassemblyKind = _disasmKind; targetOptions.EnableBurstSafetyChecks = _safetyChecks; target.IsDarkMode = EditorGUIUtility.isProSkin; targetOptions.EnableBurstCompileSynchronously = true; string defaultOptions; if (targetOptions.TryGetOptions(target.IsStaticMethod ? (MemberInfo)target.Method : target.JobType, true, out defaultOptions)) { options.Append(defaultOptions); options.AppendFormat("\n" + BurstCompilerOptions.GetOption(BurstCompilerOptions.OptionTarget, TargetCpuNames[(int)_targetCpu])); options.AppendFormat("\n" + BurstCompilerOptions.GetOption(BurstCompilerOptions.OptionDebug)); var baseOptions = options.ToString().Trim('\n', ' '); target.RawDisassembly = GetDisassembly(target.Method, baseOptions + DisasmOptions[(int)_disasmKind]); if (isTextFormatted) { // Store the formatted version target.FormattedDisassembly = _burstDisassembler.Process(target.RawDisassembly, IsIntel(_targetCpu) ? BurstDisassembler.AsmKind.Intel : BurstDisassembler.AsmKind.ARM, target.IsDarkMode); textToRender = target.FormattedDisassembly; } else { target.FormattedDisassembly = null; textToRender = target.RawDisassembly; } } } if (textToRender != null) { _textArea.Text = textToRender; if (targetChanged) { _scrollPos = Vector2.zero; } _scrollPos = GUILayout.BeginScrollView(_scrollPos, true, true); _textArea.Render(_fixedFontStyle); GUILayout.EndScrollView(); } if (doCopy) { // When copying to the clipboard, we copy the non-formatted version EditorGUIUtility.systemCopyBuffer = target.RawDisassembly ?? string.Empty; } if (fontSize != _fontSizeIndex) { _fontSizeIndex = fontSize; EditorPrefs.SetInt(FontSizeIndexPref, fontSize); _fixedFontStyle = null; } } GUILayout.EndVertical(); SplitterGUILayout.EndHorizontalSplit(); GUILayout.EndHorizontal(); }
public void DoGUI(HierarchyFrameDataView frameDataView) { using (m_DoGUIMarker.Auto()) { InitIfNeeded(); var collectingSamples = ProfilerDriver.enabled && (ProfilerDriver.profileEditor || EditorApplication.isPlaying); var isSearchAllowed = string.IsNullOrEmpty(treeView.searchString) || !(collectingSamples && ProfilerDriver.deepProfiling); var isDataAvailable = frameDataView != null && frameDataView.valid; var showDetailedView = isDataAvailable && m_DetailedViewType != DetailedViewType.None; if (showDetailedView) { SplitterGUILayout.BeginHorizontalSplit(m_DetailedViewSpliterState); } // Hierarchy view area GUILayout.BeginVertical(); DrawToolbar(frameDataView, showDetailedView); if (!isDataAvailable) { GUILayout.Label(BaseStyles.noData, BaseStyles.label); } else if (!isSearchAllowed) { GUILayout.Label(BaseStyles.disabledSearchText, BaseStyles.label); } else { var rect = GUILayoutUtility.GetRect(GUIContent.none, GUIStyle.none, GUILayout.ExpandHeight(true), GUILayout.ExpandHeight(true)); m_TreeView.SetFrameDataView(frameDataView); m_TreeView.OnGUI(rect); } GUILayout.EndVertical(); if (showDetailedView) { GUILayout.BeginVertical(); // Detailed view area EditorGUILayout.BeginHorizontal(BaseStyles.toolbar); DrawDetailedViewPopup(); GUILayout.FlexibleSpace(); DrawOptionsMenuPopup(); EditorGUILayout.EndHorizontal(); switch (m_DetailedViewType) { case DetailedViewType.Objects: detailedObjectsView.DoGUI(BaseStyles.header, frameDataView, m_TreeView.GetSelection()); break; case DetailedViewType.CallersAndCallees: detailedCallsView.DoGUI(BaseStyles.header, frameDataView, m_TreeView.GetSelection()); break; } GUILayout.EndVertical(); SplitterGUILayout.EndHorizontalSplit(); } HandleKeyboardEvents(); } }
private void OnGUI() { if (m_assets == null) { if (GUILayout.Button("Load Data")) { EditorUtility.DisplayProgressBar("Loading", "Please Wait", 0f); CalculateAssetsAndBundles(); LoadAssetSizes(); CalculateReferencedBundles(); UpdateAssetSizeRecursive(); m_mainPaneMode = HierarchyMode.Recurse; UpdateAssetsOrdered(m_mainPaneMode); CalculateBundleSize(); CalculateTotalBundleSize(); CalculateTotalAssetSize(); BuildGroupSizes(); EditorUtility.ClearProgressBar(); m_columnHeaderStyle = new GUIStyle("dockArea"); m_columnHeaderStyle.alignment = TextAnchor.MiddleLeft; m_columnHeaderStyle.padding = new RectOffset(10, 0, 0, 0); m_columnHeaderStyle.fontStyle = FontStyle.Bold; m_foldoutStyle = new GUIStyle("IN Foldout"); } } else { Toolbar(); SplitterGUILayout.BeginVerticalSplit(m_mainVerticalSplit); { SplitterGUILayout.BeginHorizontalSplit(m_upperHorizontalSplit); { EditorGUILayout.BeginVertical("box"); { GroupPane(); } EditorGUILayout.EndVertical(); EditorGUILayout.BeginVertical("box"); { AssetListPane(); } EditorGUILayout.EndVertical(); EditorGUILayout.BeginHorizontal(); { if (!m_selected.Any()) { EditorGUILayout.BeginVertical("box"); { GUILayout.BeginHorizontal(); { GUILayout.FlexibleSpace(); } GUILayout.EndHorizontal(); GUILayout.FlexibleSpace(); } EditorGUILayout.EndVertical(); } else { SplitterGUILayout.BeginVerticalSplit(m_depVerticalSplit); { EditorGUILayout.BeginVertical("box"); { ReverseDepTree(); } EditorGUILayout.EndVertical(); EditorGUILayout.BeginVertical("box"); { SelectedDeps(); } EditorGUILayout.EndVertical(); EditorGUILayout.BeginVertical("box"); { SelectedReferencedBundles(); } EditorGUILayout.EndVertical(); } SplitterGUILayout.EndVerticalSplit(); } } EditorGUILayout.EndHorizontal(); } SplitterGUILayout.EndHorizontalSplit(); SplitterGUILayout.BeginHorizontalSplit(m_lowerHorizontalSplit); { EditorGUILayout.BeginVertical("box"); { BundlePane(); } EditorGUILayout.EndVertical(); EditorGUILayout.BeginVertical("box"); { AssetPane(); } EditorGUILayout.EndVertical(); } SplitterGUILayout.EndHorizontalSplit(); } SplitterGUILayout.EndVerticalSplit(); DisplayBottomBar(); } }
public void OnGUI() { if (m_ScheduledWindowPicking) { if (m_PickingData.TrySelectWindow(m_ScheduledWindowPicking)) { EndPicking(m_PickingData.Selected); m_VisualTreeTreeView.ExpandAll(); } m_ScheduledWindowPicking = null; } else if (m_ScheduleRestoreSelection) { m_ScheduleRestoreSelection = false; if (m_PickingData.TryRestoreSelectedWindow(m_LastWindowTitle)) { EndPicking(m_PickingData.Selected); m_VisualTreeTreeView.ExpandAll(); } else { m_LastWindowTitle = String.Empty; } } EditorGUILayout.BeginHorizontal(EditorStyles.toolbar, GUILayout.ExpandWidth(true)); bool refresh = false; EditorGUI.BeginChangeCheck(); m_PickingData.DoSelectDropDown(() => { m_Refresh = true; }); bool includeShadowHierarchy = GUILayout.Toggle(m_VisualTreeTreeView.includeShadowHierarchy, Styles.includeShadowHierarchyContent, EditorStyles.toolbarButton); if (includeShadowHierarchy != m_VisualTreeTreeView.includeShadowHierarchy) { m_VisualTreeTreeView.includeShadowHierarchy = includeShadowHierarchy; refresh = true; } GUI.enabled = m_CurPanel.HasValue; using (var changedScope = new EditorGUI.ChangeCheckScope()) { m_PickingElementInPanel = GUILayout.Toggle(m_PickingElementInPanel, Styles.pickElementInPanelContent, EditorStyles.toolbarButton); if (changedScope.changed && m_PickingElementInPanel) { m_CurPanel?.View.Focus(); } } GUI.enabled = true; bool overlay = GUILayout.Toggle(m_Overlay, Styles.overlayContent, EditorStyles.toolbarButton); if (!overlay && !m_PickingElementInPanel) { panelDebug?.SetHighlightElement(null); } // Refresh overlay if (m_Overlay != overlay) { m_Overlay = overlay; m_CurPanel?.Panel.visualTree.MarkDirtyRepaint(); } // Note for future us : the UXML reload feature isn't quite ready to be public if (Unsupported.IsDeveloperBuild()) { bool uxmlLiveReloadIsEnabled = RetainedMode.UxmlLiveReloadIsEnabled; bool newUxmlLiveReloadIsEnabled = GUILayout.Toggle(uxmlLiveReloadIsEnabled, Styles.liveReloadContent, EditorStyles.toolbarButton); if (newUxmlLiveReloadIsEnabled != uxmlLiveReloadIsEnabled) { RetainedMode.UxmlLiveReloadIsEnabled = newUxmlLiveReloadIsEnabled; } } EditorGUILayout.EndHorizontal(); if (refresh || m_Refresh) { Refresh(); m_Refresh = false; } if (m_CurPanel.HasValue) { SplitterGUILayout.BeginHorizontalSplit(m_SplitterState, GUILayout.ExpandWidth(true), GUILayout.ExpandHeight(true)); SplitterGUILayout.EndHorizontalSplit(); float bottomBarHeight = EditorGUI.kSingleLineHeight + Styles.SearchFieldPaddingTop + Styles.SearchFieldPaddingBottom; float column1Width = m_SplitterState.realSizes.Length > 0 ? m_SplitterState.realSizes[0] : 150; float column2Width = position.width - column1Width; float column1Height = position.height - EditorGUI.kWindowToolbarHeight - bottomBarHeight; float column2Height = position.height - EditorGUI.kWindowToolbarHeight; Rect column1Rect = new Rect(0, EditorGUI.kWindowToolbarHeight, column1Width, column1Height); Rect column2Rect = new Rect(column1Width, EditorGUI.kWindowToolbarHeight, column2Width, column2Height); Rect bottomBarRect = new Rect(0, column1Rect.yMax, column1Rect.xMax, bottomBarHeight); GUI.Label(bottomBarRect, GUIContent.none, Styles.KBottomBarBg); float searchFieldWidth = column1Rect.xMax - Styles.SearchFieldPaddingLeft - Styles.SearchFieldPaddingRight; Rect searchFieldRect = new Rect(Styles.SearchFieldPaddingLeft, column1Rect.yMax + Styles.SearchFieldPaddingTop, searchFieldWidth, EditorGUI.kSingleLineHeight); string searchFilter = EditorGUI.ToolbarSearchField(searchFieldRect, m_SearchFieldText, false); if (searchFilter != m_SearchFieldText) { m_SearchFieldText = searchFilter; m_VisualTreeTreeView.searchString = searchFilter; } m_VisualTreeTreeView.OnGUI(column1Rect); DrawSelection(column2Rect); // Draw separator EditorGUI.DrawRect( new Rect(column1Width + column1Rect.xMin, column1Rect.y, 1, column1Rect.height + bottomBarHeight), Styles.separatorColor); } }
public void DoGUI(HierarchyFrameDataView frameDataView, bool fetchData, ref bool updateViewLive, ProfilerViewType viewType) { using (m_DoGUIMarker.Auto()) { if (Event.current.type != EventType.Layout && m_ThreadIndexDuringLastNonLayoutEvent != threadIndexInThreadNames) { m_ThreadIndexDuringLastNonLayoutEvent = threadIndexInThreadNames; EditorGUIUtility.ExitGUI(); } InitIfNeeded(); var isSearchAllowed = string.IsNullOrEmpty(treeView.searchString) || !(m_ProfilerWindow.ProfilerWindowOverheadIsAffectingProfilingRecordingData() && ProfilerDriver.deepProfiling); var isDataAvailable = frameDataView != null && frameDataView.valid; var showDetailedView = isDataAvailable && m_DetailedViewType != DetailedViewType.None; if (showDetailedView) { SplitterGUILayout.BeginHorizontalSplit(m_DetailedViewSpliterState); } // Hierarchy view area GUILayout.BeginVertical(); if (isDataAvailable && (threadIndex != frameDataView.threadIndex || threadName != frameDataView.threadName)) { SetFrameDataView(frameDataView); } DrawToolbar(frameDataView, showDetailedView, ref updateViewLive, viewType); if (!string.IsNullOrEmpty(dataAvailabilityMessage)) { GUILayout.Label(dataAvailabilityMessage, BaseStyles.label); } else if (!isDataAvailable) { if (!fetchData && !updateViewLive) { GUILayout.Label(BaseStyles.liveUpdateMessage, BaseStyles.label); } else { GUILayout.Label(BaseStyles.noData, BaseStyles.label); } } else if (!isSearchAllowed) { GUILayout.Label(BaseStyles.disabledSearchText, BaseStyles.label); } else { var rect = GUILayoutUtility.GetRect(GUIContent.none, GUIStyle.none, GUILayout.ExpandHeight(true), GUILayout.ExpandHeight(true)); m_TreeView.SetFrameDataView(frameDataView); m_TreeView.OnGUI(rect, updateViewLive); if (m_TreeView.HasSelection() && m_TreeView.proxySelectionInfo.hasProxySelection) { if (m_TreeView.proxySelectionInfo.cachedDisplayContent == null) { var diff = Math.Abs(m_TreeView.proxySelectionInfo.pathLengthDifferenceForProxy); m_TreeView.proxySelectionInfo.cachedDisplayContent = new GUIContent( BaseStyles.selectionExtraInfoHierarhcyView + string.Format( BaseStyles.proxySampleMessage, m_TreeView.proxySelectionInfo.nonProxyName, diff, diff == 1 ? BaseStyles.proxySampleMessageScopeSingular : BaseStyles.proxySampleMessageScopePlural), BaseStyles.warningTriangle.image); } GUILayout.BeginHorizontal(); GUILayout.Box(m_TreeView.proxySelectionInfo.cachedDisplayContent, BaseStyles.selectionExtraInfoArea); var rectForSampleStackButton = GUILayoutUtility.GetRect(BaseStyles.showDetailsDropdownContent, BaseStyles.tooltipDropdown, GUILayout.ExpandHeight(false), GUILayout.ExpandHeight(false)); if (GUI.Button(rectForSampleStackButton, BaseStyles.showDetailsDropdownContent, BaseStyles.tooltipDropdown)) { var selection = m_TreeView.GetSelection(); var selectedId = (selection != null && selection.Count > 0) ? selection[0] : ProfilerFrameDataHierarchyView.invalidTreeViewId; if (selectedId >= 0) { var menu = new GenericMenu(); // Show Sample Selection: var rawSampleIndices = new List <int>(frameDataView.GetItemMergedSamplesCount(selectedId)); frameDataView.GetItemRawFrameDataViewIndices(selectedId, rawSampleIndices); var actualMarkerIdPath = new List <int>(frameDataView.GetItemDepth(selectedId)); using (var iterator = new RawFrameDataView(frameDataView.frameIndex, frameDataView.threadIndex)) { string name = null; var rawIndex = ProfilerTimelineGUI.GetItemMarkerIdPath(iterator, cpuModule, rawSampleIndices[0], ref name, ref actualMarkerIdPath); } var actualMarkerPath = new List <string>(actualMarkerIdPath.Count); foreach (var id in actualMarkerIdPath) { if ((frameDataView.GetMarkerFlags(id) & Unity.Profiling.LowLevel.MarkerFlags.AvailabilityEditor) != 0) { actualMarkerPath.Add(string.Format("EditorOnly [{0}]", frameDataView.GetMarkerName(id))); } else { actualMarkerPath.Add(frameDataView.GetMarkerName(id)); } } // admittedly, it'd be nice to only generate the text if sample selection option was chosen... // however, that would need to happen in an OnGui call and not within the callback of the generic menu, // to be able to calculate the needed window size and avoid glitches on first displaying it. // at least the user already clicked on the dropdown for this... string selectedSampleStackText = null; var sampleStackSb = new System.Text.StringBuilder(); if (m_TreeView.proxySelectionInfo.nonProxySampleStack != null && m_TreeView.proxySelectionInfo.nonProxySampleStack.Count > 0) { for (int i = m_TreeView.proxySelectionInfo.nonProxySampleStack.Count - 1; i >= 0; i--) { sampleStackSb.AppendLine(m_TreeView.proxySelectionInfo.nonProxySampleStack[i]); } selectedSampleStackText = sampleStackSb.ToString(); } string actualSampleStackText = null; if (actualMarkerPath != null && actualMarkerPath.Count > 0) { sampleStackSb.Clear(); for (int i = actualMarkerPath.Count - 1; i >= 0; i--) { sampleStackSb.AppendLine(actualMarkerPath[i]); } actualSampleStackText = sampleStackSb.ToString(); } var selectionSampleStackContent = selectedSampleStackText != null ? new GUIContent(selectedSampleStackText) : null; var actualSampleStackContent = actualSampleStackText != null ? new GUIContent(actualSampleStackText) : null; var sampleStackWindowSize = SelectedSampleStackWindow.CalculateSize(selectionSampleStackContent, actualSampleStackContent); menu.AddItem(BaseStyles.showSelectedSampleStacks, false, () => { SelectedSampleStackWindow.ShowSampleStackWindow(GUIUtility.GUIToScreenRect(rectForSampleStackButton).position, sampleStackWindowSize, selectionSampleStackContent, actualSampleStackContent); }); menu.DropDown(rectForSampleStackButton); } } GUILayout.EndHorizontal(); } } GUILayout.EndVertical(); if (showDetailedView) { GUILayout.BeginVertical(); // Detailed view area EditorGUILayout.BeginHorizontal(BaseStyles.toolbar); DrawDetailedViewPopup(); GUILayout.FlexibleSpace(); cpuModule.DrawOptionsMenuPopup(); EditorGUILayout.EndHorizontal(); switch (m_DetailedViewType) { case DetailedViewType.Objects: detailedObjectsView.DoGUI(BaseStyles.header, frameDataView, m_TreeView.GetSelection()); break; case DetailedViewType.CallersAndCallees: detailedCallsView.DoGUI(BaseStyles.header, frameDataView, m_TreeView.GetSelection()); break; } GUILayout.EndVertical(); SplitterGUILayout.EndHorizontalSplit(); } HandleKeyboardEvents(); } }
public static void EndHorizontalSplit() => SplitterGUILayout.EndHorizontalSplit();
public void DoGUI(FrameDataView frameDataView) { InitIfNeeded(); var isDataAvailable = frameDataView != null && frameDataView.IsValid(); m_TreeView.SetFrameDataView(frameDataView); var showDetailedView = isDataAvailable && m_DetailedViewType != DetailedViewType.None; if (showDetailedView) { SplitterGUILayout.BeginHorizontalSplit(m_DetailedViewSpliterState); } // Hierarchy view area GUILayout.BeginVertical(); DrawToolbar(frameDataView, showDetailedView); if (!isDataAvailable) { GUILayout.Label(BaseStyles.noData, BaseStyles.label); } else { var rect = GUILayoutUtility.GetRect(GUIContent.none, GUIStyle.none, GUILayout.ExpandHeight(true), GUILayout.ExpandHeight(true)); m_TreeView.OnGUI(rect); } GUILayout.EndVertical(); if (showDetailedView) { GUILayout.BeginVertical(); // Detailed view area EditorGUILayout.BeginHorizontal(BaseStyles.toolbar); DrawDetailedViewPopup(); GUILayout.FlexibleSpace(); EditorGUILayout.EndHorizontal(); switch (m_DetailedViewType) { case DetailedViewType.Objects: detailedObjectsView.DoGUI(BaseStyles.header, frameDataView, m_TreeView.GetSelection()); break; case DetailedViewType.CallersAndCallees: detailedCallsView.DoGUI(BaseStyles.header, frameDataView, m_TreeView.GetSelection()); break; } GUILayout.EndVertical(); SplitterGUILayout.EndHorizontalSplit(); } HandleKeyboardEvents(); }
void DrawNetworkOperationsPane(Rect position) { SplitterGUILayout.BeginHorizontalSplit(m_NetworkSplit); var overviewLabel = GUIContent.Temp(ProfilerDriver.GetOverviewText(ProfilerArea.NetworkOperations, m_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); }
public void OnGUI() { if (this.m_ScheduleRestoreSelection) { this.m_ScheduleRestoreSelection = false; if (this.m_PickingData.TryRestoreSelectedWindow(this.m_LastWindowTitle)) { this.EndPicking(this.m_PickingData.Selected); this.m_VisualTreeTreeView.ExpandAll(); } else { this.m_LastWindowTitle = string.Empty; } } EditorGUILayout.BeginHorizontal(EditorStyles.toolbar, new GUILayoutOption[] { GUILayout.ExpandWidth(true) }); bool flag = false; EditorGUI.BeginChangeCheck(); this.m_PickingData.DoSelectDropDown(); if (EditorGUI.EndChangeCheck()) { flag = true; } if (GUILayout.Button("Refresh", EditorStyles.toolbarButton, new GUILayoutOption[] { GUILayout.Width(50f) })) { this.m_PickingData.Refresh(); } bool flag2 = GUILayout.Toggle(this.m_VisualTreeTreeView.includeShadowHierarchy, UIElementsDebugger.Styles.includeShadowHierarchyContent, EditorStyles.toolbarButton, new GUILayoutOption[0]); if (flag2 != this.m_VisualTreeTreeView.includeShadowHierarchy) { this.m_VisualTreeTreeView.includeShadowHierarchy = flag2; flag = true; } if (this.m_CurPanel.HasValue) { bool flag3 = GUILayout.Toggle(this.m_PickingElementInPanel, UIElementsDebugger.Styles.pickElementInPanelContent, EditorStyles.toolbarButton, new GUILayoutOption[0]); if (flag3 != this.m_PickingElementInPanel) { this.m_PickingElementInPanel = flag3; if (this.m_PickingElementInPanel) { this.m_CurPanel.Value.Panel.panelDebug.interceptEvents = new Func <Event, bool>(this.InterceptEvents); } } } this.m_Overlay = GUILayout.Toggle(this.m_Overlay, UIElementsDebugger.Styles.overlayContent, EditorStyles.toolbarButton, new GUILayoutOption[0]); bool uxmlLiveReloadIsEnabled = RetainedMode.UxmlLiveReloadIsEnabled; bool flag4 = GUILayout.Toggle(uxmlLiveReloadIsEnabled, UIElementsDebugger.Styles.liveReloadContent, EditorStyles.toolbarButton, new GUILayoutOption[0]); if (flag4 != uxmlLiveReloadIsEnabled) { RetainedMode.UxmlLiveReloadIsEnabled = flag4; } EditorGUILayout.EndHorizontal(); if (flag) { this.EndPicking(this.m_PickingData.Selected); } if (this.m_CurPanel.HasValue) { if (this.m_CurPanel.Value.Panel.panelDebug.enabled != this.m_Overlay) { this.m_CurPanel.Value.Panel.panelDebug.enabled = this.m_Overlay; this.m_CurPanel.Value.Panel.visualTree.Dirty(ChangeType.Repaint); } SplitterGUILayout.BeginHorizontalSplit(this.m_SplitterState, new GUILayoutOption[] { GUILayout.ExpandWidth(true), GUILayout.ExpandHeight(true) }); SplitterGUILayout.EndHorizontalSplit(); float num = (float)((this.m_SplitterState.realSizes.Length <= 0) ? 150 : this.m_SplitterState.realSizes[0]); float width = base.position.width - num; Rect rect = new Rect(0f, 17f, num, base.position.height - 17f); Rect rect2 = new Rect(num, 17f, width, rect.height); this.m_VisualTreeTreeView.OnGUI(rect); this.DrawSelection(rect2); EditorGUI.DrawRect(new Rect(num + rect.xMin, rect.y, 1f, rect.height), UIElementsDebugger.Styles.separatorColor); } }
public void OnGUI() { if (m_ScheduledWindowPicking) { if (m_PickingData.TrySelectWindow(m_ScheduledWindowPicking)) { EndPicking(m_PickingData.Selected); m_VisualTreeTreeView.ExpandAll(); } m_ScheduledWindowPicking = null; } else if (m_ScheduleRestoreSelection) { m_ScheduleRestoreSelection = false; if (m_PickingData.TryRestoreSelectedWindow(m_LastWindowTitle)) { EndPicking(m_PickingData.Selected); m_VisualTreeTreeView.ExpandAll(); } else { m_LastWindowTitle = String.Empty; } } EditorGUILayout.BeginHorizontal(EditorStyles.toolbar, GUILayout.ExpandWidth(true)); bool refresh = false; EditorGUI.BeginChangeCheck(); m_PickingData.DoSelectDropDown(() => { Dictionary <int, Panel> .Enumerator it = UIElementsUtility.GetPanelsIterator(); while (it.MoveNext()) { it.Current.Value.panelDebug = null; } m_Refresh = true; }); bool includeShadowHierarchy = GUILayout.Toggle(m_VisualTreeTreeView.includeShadowHierarchy, Styles.includeShadowHierarchyContent, EditorStyles.toolbarButton); if (includeShadowHierarchy != m_VisualTreeTreeView.includeShadowHierarchy) { m_VisualTreeTreeView.includeShadowHierarchy = includeShadowHierarchy; refresh = true; } GUI.enabled = m_CurPanel.HasValue; bool newPickingElementInPanel = GUILayout.Toggle(m_PickingElementInPanel, Styles.pickElementInPanelContent, EditorStyles.toolbarButton); m_PickingElementInPanel = newPickingElementInPanel; GUI.enabled = true; m_Overlay = GUILayout.Toggle(m_Overlay, Styles.overlayContent, EditorStyles.toolbarButton); // Note for future us : the UXML reload feature isn't quite ready to be public if (Unsupported.IsDeveloperBuild()) { bool uxmlLiveReloadIsEnabled = RetainedMode.UxmlLiveReloadIsEnabled; bool newUxmlLiveReloadIsEnabled = GUILayout.Toggle(uxmlLiveReloadIsEnabled, Styles.liveReloadContent, EditorStyles.toolbarButton); if (newUxmlLiveReloadIsEnabled != uxmlLiveReloadIsEnabled) { RetainedMode.UxmlLiveReloadIsEnabled = newUxmlLiveReloadIsEnabled; } } EditorGUILayout.EndHorizontal(); if (refresh || m_Refresh) { EndPicking(m_PickingData.Selected); } if (m_CurPanel.HasValue) { if (m_CurPanel.Value.Panel.panelDebug.enabled != (m_Overlay || m_PickingElementInPanel)) { m_CurPanel.Value.Panel.panelDebug.enabled = m_Overlay || m_PickingElementInPanel; m_CurPanel.Value.Panel.visualTree.Dirty(ChangeType.Repaint); } SplitterGUILayout.BeginHorizontalSplit(m_SplitterState, GUILayout.ExpandWidth(true), GUILayout.ExpandHeight(true)); SplitterGUILayout.EndHorizontalSplit(); float column1Width = m_SplitterState.realSizes.Length > 0 ? m_SplitterState.realSizes[0] : 150; float column2Width = position.width - column1Width; Rect column1Rect = new Rect(0, EditorGUI.kWindowToolbarHeight, column1Width, position.height - EditorGUI.kWindowToolbarHeight); Rect column2Rect = new Rect(column1Width, EditorGUI.kWindowToolbarHeight, column2Width, column1Rect.height); m_VisualTreeTreeView.OnGUI(column1Rect); DrawSelection(column2Rect); // Draw separator EditorGUI.DrawRect( new Rect(column1Width + column1Rect.xMin, column1Rect.y, 1, column1Rect.height), Styles.separatorColor); } }
public void OnGUI() { if (!_initialized) { GUILayout.BeginHorizontal(); GUILayout.FlexibleSpace(); GUILayout.BeginVertical(); GUILayout.FlexibleSpace(); GUILayout.Label("Loading..."); GUILayout.FlexibleSpace(); GUILayout.EndVertical(); GUILayout.FlexibleSpace(); GUILayout.EndHorizontal(); return; } // Make sure that editor options are synchronized BurstEditorOptions.EnsureSynchronized(); if (_fontSizesText == null) { _fontSizesText = new string[FontSizes.Length]; for (var i = 0; i < FontSizes.Length; ++i) { _fontSizesText[i] = FontSizes[i].ToString(); } } if (_fontSizeIndex == -1) { _fontSizeIndex = EditorPrefs.GetInt(FontSizeIndexPref, 5); _fontSizeIndex = Math.Max(0, _fontSizeIndex); _fontSizeIndex = Math.Min(_fontSizeIndex, FontSizes.Length - 1); } if (_fixedFontStyle == null) { _fixedFontStyle = new GUIStyle(GUI.skin.label); string fontName; if (Application.platform == RuntimePlatform.WindowsEditor) { fontName = "Consolas"; } else { fontName = "Courier"; } CleanupFont(); _font = Font.CreateDynamicFontFromOSFont(fontName, FontSize); _fixedFontStyle.font = _font; _fixedFontStyle.fontSize = FontSize; } if (_searchField == null) { _searchField = new SearchField(); } if (_textArea == null) { _textArea = new LongTextArea(); } GUILayout.BeginHorizontal(); // SplitterGUILayout.BeginHorizontalSplit is internal in Unity but we don't have much choice SplitterGUILayout.BeginHorizontalSplit(TreeViewSplitterState); GUILayout.BeginVertical(GUILayout.Width(position.width / 3)); GUILayout.Label("Compile Targets", EditorStyles.boldLabel); var newFilter = _searchField.OnGUI(_treeView.Filter); if (newFilter != _treeView.Filter) { _treeView.Filter = newFilter; _treeView.Reload(); } _treeView.OnGUI(GUILayoutUtility.GetRect(GUIContent.none, GUIStyle.none, GUILayout.ExpandHeight(true), GUILayout.ExpandWidth(true))); GUILayout.EndVertical(); GUILayout.BeginVertical(); var selection = _treeView.GetSelection(); if (selection.Count == 1) { var targetIndex = selection[0]; var target = _targets[targetIndex - 1]; var targetOptions = target.Options; // Stash selected item name to handle domain reloads more gracefully _selectedItem = target.GetDisplayName(); if (_assemblyKind == -1) { if (_enhancedDisassembly) { _assemblyKind = (int)AssemblyKind.ColouredMinimalDebugInformation; } else { _assemblyKind = (int)AssemblyKind.RawNoDebugInformation; } } // Refresh if any options are changed bool doCopy; int fontSize; // -14 to add a little bit of space for the vertical scrollbar to display correctly RenderButtonBars((position.width * 2) / 3 - 14, target, out doCopy, out fontSize); // We are currently formatting only Asm output var isTextFormatted = IsEnhanced((AssemblyKind)_assemblyKind) && _disasmKind == DisassemblyKind.Asm; // Depending if we are formatted or not, we don't render the same text var textToRender = isTextFormatted ? target.FormattedDisassembly : target.RawDisassembly; // Only refresh if we are switching to a new selection that hasn't been disassembled yet // Or we are changing disassembly settings (safety checks / enhanced disassembly) var targetRefresh = textToRender == null || target.DisassemblyKind != _disasmKind || targetOptions.EnableBurstSafetyChecks != _safetyChecks || target.TargetCpu != _targetCpu || target.IsDarkMode != EditorGUIUtility.isProSkin; bool targetChanged = _previousTargetIndex != targetIndex; _previousTargetIndex = targetIndex; if (_assemblyKindPrior != _assemblyKind) { targetRefresh = true; _assemblyKindPrior = _assemblyKind; // Needs to be refreshed, as we need to change disassembly options // If the target did not changed but our assembly kind did, we need to remember this. if (!targetChanged) { _sameTargetButDifferentAssemblyKind = true; } } // If the previous target changed the assembly kind and we have a target change, we need to // refresh the assembly because we'll have cached the previous assembly kinds output rather // than the one requested. if (_sameTargetButDifferentAssemblyKind && targetChanged) { targetRefresh = true; _sameTargetButDifferentAssemblyKind = false; } if (targetRefresh) { // TODO: refactor this code with a proper AppendOption to avoid these "\n" var options = new StringBuilder(); target.TargetCpu = _targetCpu; target.DisassemblyKind = _disasmKind; targetOptions.EnableBurstSafetyChecks = _safetyChecks; target.IsDarkMode = EditorGUIUtility.isProSkin; targetOptions.EnableBurstCompileSynchronously = true; string defaultOptions; if (targetOptions.TryGetOptions(target.IsStaticMethod ? (MemberInfo)target.Method : target.JobType, true, out defaultOptions)) { options.Append(defaultOptions); options.AppendFormat("\n" + BurstCompilerOptions.GetOption(BurstCompilerOptions.OptionTarget, TargetCpuNames[(int)_targetCpu])); switch ((AssemblyKind)_assemblyKind) { case AssemblyKind.EnhancedMinimalDebugInformation: case AssemblyKind.ColouredMinimalDebugInformation: options.AppendFormat("\n" + BurstCompilerOptions.GetOption(BurstCompilerOptions.OptionDebug, "2")); break; case AssemblyKind.ColouredFullDebugInformation: case AssemblyKind.EnhancedFullDebugInformation: case AssemblyKind.RawWithDebugInformation: options.AppendFormat("\n" + BurstCompilerOptions.GetOption(BurstCompilerOptions.OptionDebug, "1")); break; default: case AssemblyKind.RawNoDebugInformation: break; } var baseOptions = options.ToString().Trim('\n', ' '); target.RawDisassembly = GetDisassembly(target.Method, baseOptions + DisasmOptions[(int)_disasmKind]); if (isTextFormatted) { target.FormattedDisassembly = _burstDisassembler.Process(target.RawDisassembly, FetchAsmKind(_targetCpu), target.IsDarkMode, IsColoured((AssemblyKind)_assemblyKind)); textToRender = target.FormattedDisassembly; } else { target.FormattedDisassembly = null; textToRender = target.RawDisassembly; } } } if (textToRender != null) { _textArea.Text = textToRender; if (targetChanged) { _scrollPos = Vector2.zero; } _scrollPos = GUILayout.BeginScrollView(_scrollPos, true, true); _textArea.Render(_fixedFontStyle); GUILayout.EndScrollView(); } if (doCopy) { // When copying to the clipboard, we copy the version the user sees EditorGUIUtility.systemCopyBuffer = textToRender ?? string.Empty; } if (fontSize != _fontSizeIndex) { _fontSizeIndex = fontSize; EditorPrefs.SetInt(FontSizeIndexPref, fontSize); _fixedFontStyle = null; } } GUILayout.EndVertical(); SplitterGUILayout.EndHorizontalSplit(); GUILayout.EndHorizontal(); }
void DrawNetworkOperationsPane() { SplitterGUILayout.BeginHorizontalSplit(m_NetworkSplit); GUILayout.Label(ProfilerDriver.GetOverviewText(ProfilerArea.NetworkOperations, m_ProfilerWindow.GetActiveVisibleFrameIndex()), EditorStyles.wordWrappedLabel); m_PaneScroll = GUILayout.BeginScrollView(m_PaneScroll, ProfilerWindow.Styles.background); EditorGUILayout.BeginHorizontal(EditorStyles.contentToolbar); 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(); }