public static void UpdateHoveredAsset(string hoveredAssetPath, Rect hoveredAssetRect, bool showingUsedAssets, BuildInfo buildReportToDisplay, AssetDependencies assetDependencies) { var alreadyUsingSameAssetPath = hoveredAssetPath.Equals(HoveredAssetEntryPath, StringComparison.OrdinalIgnoreCase); if (!alreadyUsingSameAssetPath) { HoveredAssetEntryPath = hoveredAssetPath; } // even if the new hovered asset to assign is the same as the current one, // its rect might have moved, so we always assign it HoveredAssetEntryRect = hoveredAssetRect; if (BuildReportTool.Options.ShowAssetPrimaryUsersInTooltipIfAvailable && !alreadyUsingSameAssetPath) { UpdateHoveredAssetType(hoveredAssetPath, showingUsedAssets); if (HoveredAssetIsASceneInBuild) { UpdateSceneInBuildLabel(SceneIsInBuildLabel, buildReportToDisplay.ScenesInBuild, HoveredAssetEntryPath); } AssignHoveredAssetEndUsers(assetDependencies); } }
public override void RefreshData(BuildInfo buildReport, AssetDependencies assetDependencies, TextureData textureData, UnityBuildReport unityBuildReport) { const string README_FILENAME = "README.txt"; _readmeContents = BuildReportTool.Util.GetPackageFileContents(README_FILENAME); const string CHANGELOG_FILENAME = "VERSION.txt"; _changelogContents = BuildReportTool.Util.GetPackageFileContents(CHANGELOG_FILENAME); if (_readmeContents.Length > LABEL_LENGTH) { _readmeContents = _readmeContents.Substring(0, LABEL_LENGTH); } if (_changelogContents.Length > LABEL_LENGTH) { _changelogContents = _changelogContents.Substring(0, LABEL_LENGTH); } if (_readmeGuiContent == null) { _readmeGuiContent = new GUIContent(_readmeContents); } if (_changelogGuiContent == null) { _changelogGuiContent = new GUIContent(_changelogContents); } }
public static void DrawThumbnailEndUsersTooltip(Rect position, AssetDependencies assetDependencies) { List <GUIContent> endUsersListToUse = GetEndUserLabelsFor(assetDependencies, HoveredAssetEntryPath); DrawThumbnailEndUsersTooltip(position, HoveredAssetEntryPath, GetAppropriateEndUserLabelForHovered(), endUsersListToUse, HoveredAssetEntryRect); }
public override void RefreshData(BuildInfo buildReport, AssetDependencies assetDependencies, TextureData textureData, UnityBuildReport unityBuildReport) { if (unityBuildReport != null) { SelectStep(-1, unityBuildReport.BuildProcessSteps); } }
public override void DrawGUI(Rect position, BuildInfo buildReportToDisplay, AssetDependencies assetDependencies, TextureData textureData, UnityBuildReport unityBuildReport, out bool requestRepaint ) { if (buildReportToDisplay == null) { requestRepaint = false; return; } requestRepaint = false; if (Event.current.type == EventType.Layout) { _hasTotalBuildSize = !string.IsNullOrEmpty(buildReportToDisplay.TotalBuildSize) && !string.IsNullOrEmpty(buildReportToDisplay.BuildFilePath); _hasUsedAssetsTotalSize = !string.IsNullOrEmpty(buildReportToDisplay.UsedTotalSize); _hasCompressedBuildSize = !string.IsNullOrEmpty(buildReportToDisplay.CompressedBuildSize); _hasBuildSizes = buildReportToDisplay.BuildSizes != null; _hasMonoDLLsToDisplay = buildReportToDisplay.MonoDLLs != null && buildReportToDisplay.MonoDLLs.Length > 0; _hasUnityEngineDLLsToDisplay = buildReportToDisplay.UnityEngineDLLs != null && buildReportToDisplay.UnityEngineDLLs.Length > 0; _hasScriptDLLsToDisplay = buildReportToDisplay.ScriptDLLs != null && buildReportToDisplay.ScriptDLLs.Length > 0; } GUILayout.Space(2); // top padding for scrollbar _assetListScrollPos = GUILayout.BeginScrollView(_assetListScrollPos); GUILayout.Space(10); // top padding for content GUILayout.BeginHorizontal(); GUILayout.Space(10); // extra left padding DrawTotalSize(buildReportToDisplay); GUILayout.Space(BuildReportTool.Window.Settings.CATEGORY_HORIZONTAL_SPACING); GUILayout.BeginVertical(); DrawBuildSizes(buildReportToDisplay); GUILayout.Space(BuildReportTool.Window.Settings.CATEGORY_VERTICAL_SPACING); DrawDLLList(buildReportToDisplay); GUILayout.EndVertical(); GUILayout.Space(20); // extra right padding GUILayout.EndHorizontal(); GUILayout.EndScrollView(); }
public static bool ShouldHoveredAssetShowEndUserTooltip(AssetDependencies assetDependencies) { if (_hoveredAssetType != AssetInfoType.None) { return(true); } List <GUIContent> endUsersListToUse = GetEndUserLabelsFor(assetDependencies, HoveredAssetEntryPath); return(endUsersListToUse != null && endUsersListToUse.Count > 0); }
public override void DrawGUI(Rect position, BuildInfo buildReportToDisplay, AssetDependencies assetDependencies, TextureData textureData, UnityBuildReport unityBuildReport, out bool requestRepaint ) { requestRepaint = false; GUI.SetNextControlName("BRT_HelpUnfocuser"); GUI.TextField(new Rect(-100, -100, 10, 10), ""); GUILayout.Space(10); // extra top padding GUILayout.BeginHorizontal(); int newSelectedHelpIdx = GUILayout.SelectionGrid(_selectedHelpContentsIdx, _helpTypeLabels, 1); if (newSelectedHelpIdx != _selectedHelpContentsIdx) { GUI.FocusControl("BRT_HelpUnfocuser"); } _selectedHelpContentsIdx = newSelectedHelpIdx; //GUILayout.Space((position.width - HELP_CONTENT_WIDTH) * 0.5f); if (_selectedHelpContentsIdx == HELP_TYPE_README_IDX) { _readmeScrollPos = GUILayout.BeginScrollView( _readmeScrollPos); float readmeHeight = GUI.skin.GetStyle(HELP_CONTENT_GUI_STYLE) .CalcHeight(_readmeGuiContent, HELP_CONTENT_WIDTH); EditorGUILayout.SelectableLabel(_readmeContents, HELP_CONTENT_GUI_STYLE, GUILayout.Width(HELP_CONTENT_WIDTH), GUILayout.Height(readmeHeight)); GUILayout.EndScrollView(); } else if (_selectedHelpContentsIdx == HELP_TYPE_CHANGELOG_IDX) { _changelogScrollPos = GUILayout.BeginScrollView( _changelogScrollPos); float changelogHeight = GUI.skin.GetStyle(HELP_CONTENT_GUI_STYLE) .CalcHeight(_changelogGuiContent, HELP_CONTENT_WIDTH); EditorGUILayout.SelectableLabel(_changelogContents, HELP_CONTENT_GUI_STYLE, GUILayout.Width(HELP_CONTENT_WIDTH), GUILayout.Height(changelogHeight)); GUILayout.EndScrollView(); } GUILayout.EndHorizontal(); }
static List <GUIContent> GetEndUserLabelsFor(AssetDependencies assetDependencies, string assetPath) { if (string.IsNullOrEmpty(assetPath)) { return(null); } List <GUIContent> endUsersListToUse = null; var dependencies = assetDependencies.GetAssetDependencies(); if (dependencies.ContainsKey(assetPath)) { var entry = dependencies[assetPath]; if (entry != null) { endUsersListToUse = entry.GetEndUserLabels(); } } return(endUsersListToUse); }
void DrawAssetList(BuildReportTool.AssetList assetList, bool usedAssets, BuildInfo buildReportToDisplay, AssetDependencies assetDependencies) { if (assetList == null || assetList.TopLargest == null) { //Debug.LogError("no top ten largest"); return; } BuildReportTool.SizePart[] assetsToShow = assetList.TopLargest; if (assetsToShow == null) { //Debug.LogError("no top ten largest"); return; } bool useAlt = true; var newEntryHoveredIdx = -1; BuildReportTool.SizePart newEntryHovered = null; Rect newEntryHoveredRect = new Rect(); Rect iconRect = new Rect(); var hoveringOverIcon = false; //var hoveringOverLabel = false; GUILayout.BeginHorizontal(); // 1st column: name GUILayout.BeginVertical(); for (int n = 0; n < assetsToShow.Length; ++n) { BuildReportTool.SizePart b = assetsToShow[n]; string styleToUse = useAlt ? BuildReportTool.Window.Settings.LIST_NORMAL_ALT_STYLE_NAME : BuildReportTool.Window.Settings.LIST_NORMAL_STYLE_NAME; string iconStyleToUse = useAlt ? BuildReportTool.Window.Settings.LIST_ICON_ALT_STYLE_NAME : BuildReportTool.Window.Settings.LIST_ICON_STYLE_NAME; Texture icon = AssetDatabase.GetCachedIcon(b.Name); GUILayout.BeginHorizontal(); if (icon == null) { // no icon, just add space so it aligns with the other entries GUILayout.Label(string.Empty, iconStyleToUse, GUILayout.Width(28), GUILayout.Height(30)); } else { GUILayout.Button(icon, iconStyleToUse, GUILayout.Width(28), GUILayout.Height(30)); } if (Event.current.type == EventType.Repaint) { iconRect = GUILayoutUtility.GetLastRect(); // if mouse is hovering over asset entry's icon (not the label) // draw a border on the asset icon if (iconRect.Contains(Event.current.mousePosition)) { hoveringOverIcon = true; newEntryHoveredIdx = n; newEntryHovered = b; newEntryHoveredRect = iconRect; GUI.Box(iconRect, icon, "IconHovered"); } } string prettyName = string.Format(" {0}. {1}", (n + 1).ToString(), BuildReportTool.Util.GetAssetFilename(b.Name)); if (GUILayout.Button(prettyName, styleToUse, GUILayout.MinWidth(100), GUILayout.MaxWidth(400), GUILayout.Height(30))) { Utility.PingAssetInProject(b.Name); } if (newEntryHoveredIdx == -1 && Event.current.type == EventType.Repaint) { var labelRect = GUILayoutUtility.GetLastRect(); // if mouse is hovering over asset entry's label // draw a border on the asset icon if (labelRect.Contains(Event.current.mousePosition)) { //hoveringOverLabel = true; newEntryHoveredIdx = n; newEntryHovered = b; newEntryHoveredRect = labelRect; GUI.Box(iconRect, icon, "IconHovered"); } } GUILayout.EndHorizontal(); useAlt = !useAlt; } GUILayout.EndVertical(); if (Event.current.type == EventType.Repaint) { if (usedAssets) { _assetUsedEntryHoveredIdx = newEntryHoveredIdx; } else { _assetUnusedEntryHoveredIdx = newEntryHoveredIdx; } if (newEntryHoveredIdx != -1) { string hoveredAssetPath = newEntryHovered != null ? newEntryHovered.Name : null; // ---------------- // update what is considered the hovered asset, for use later on // when the tooltip will be drawn BRT_BuildReportWindow.UpdateHoveredAsset(hoveredAssetPath, newEntryHoveredRect, usedAssets, buildReportToDisplay, assetDependencies); // ---------------- // if mouse is hovering over the correct area, we signify that // the tooltip thumbnail should be drawn if (BuildReportTool.Options.ShowTooltipThumbnail && (BuildReportTool.Options.ShowThumbnailOnHoverLabelToo || hoveringOverIcon) && BRT_BuildReportWindow.GetAssetPreview(hoveredAssetPath) != null) { _shouldShowThumbnailOnHoveredAsset = true; } else { _shouldShowThumbnailOnHoveredAsset = false; } } } // 2nd column: size var useRawSize = (usedAssets && !BuildReportTool.Options.ShowImportedSizeForUsedAssets) || !usedAssets; useAlt = true; GUILayout.BeginVertical(); for (int n = 0; n < assetsToShow.Length; ++n) { BuildReportTool.SizePart b = assetsToShow[n]; string styleToUse = useAlt ? BuildReportTool.Window.Settings.LIST_NORMAL_ALT_STYLE_NAME : BuildReportTool.Window.Settings.LIST_NORMAL_STYLE_NAME; GUILayout.Label(useRawSize ? b.RawSize : b.ImportedSize, styleToUse, GUILayout.MaxWidth(100), GUILayout.Height(30)); useAlt = !useAlt; } GUILayout.EndVertical(); GUILayout.FlexibleSpace(); GUILayout.EndHorizontal(); }
public override void DrawGUI(Rect position, BuildInfo buildReportToDisplay, AssetDependencies assetDependencies, TextureData textureData, UnityBuildReport unityBuildReport, out bool requestRepaint ) { if (buildReportToDisplay == null) { requestRepaint = false; return; } GUILayout.Space(2); // top padding for scrollbar _scrollPos = GUILayout.BeginScrollView(_scrollPos); GUILayout.BeginHorizontal(); GUILayout.Space(10); // extra left padding GUILayout.BeginVertical(); GUILayout.Space(10); // top padding // report title GUILayout.Label(buildReportToDisplay.SuitableTitle, BuildReportTool.Window.Settings.MAIN_TITLE_STYLE_NAME); GUILayout.Space(10); // two-column layout GUILayout.BeginVertical(); GUILayout.BeginHorizontal(); // 1st column GUILayout.BeginVertical(GUILayout.MaxWidth(350)); GUILayout.Label(Labels.TIME_OF_BUILD_LABEL, BuildReportTool.Window.Settings.INFO_TITLE_STYLE_NAME); GUILayout.Label(buildReportToDisplay.GetTimeReadable(), BuildReportTool.Window.Settings.INFO_SUBTITLE_STYLE_NAME); GUILayout.Label("Project building took:", BuildReportTool.Window.Settings.INFO_TITLE_STYLE_NAME); GUILayout.Label("How long the project building took. This is the time between OnPreprocessBuild and OnPostprocessBuild.", BuildReportTool.Window.Settings.TINY_HELP_STYLE_NAME); GUILayout.Label(buildReportToDisplay.BuildDurationTime.ToString(), BuildReportTool.Window.Settings.INFO_SUBTITLE_STYLE_NAME); GUILayout.Label("Report generation took:", BuildReportTool.Window.Settings.INFO_TITLE_STYLE_NAME); GUILayout.Label("How long the Build Report Generation took.", BuildReportTool.Window.Settings.TINY_HELP_STYLE_NAME); GUILayout.Label(buildReportToDisplay.ReportGenerationTime.ToString(), BuildReportTool.Window.Settings.INFO_SUBTITLE_STYLE_NAME); if (!string.IsNullOrEmpty(buildReportToDisplay.TotalBuildSize) && !string.IsNullOrEmpty(buildReportToDisplay.BuildFilePath)) { GUILayout.BeginVertical(); GUILayout.Label(Labels.BUILD_TOTAL_SIZE_LABEL, BuildReportTool.Window.Settings.INFO_TITLE_STYLE_NAME); GUILayout.Label(BuildReportTool.Util.GetBuildSizePathDescription(buildReportToDisplay), BuildReportTool.Window.Settings.TINY_HELP_STYLE_NAME); GUILayout.Label(buildReportToDisplay.TotalBuildSize, BuildReportTool.Window.Settings.BIG_NUMBER_STYLE_NAME); GUILayout.EndVertical(); } GUILayout.Space(20); string emphasisColor = "black"; if (EditorGUIUtility.isProSkin || BRT_BuildReportWindow.FORCE_USE_DARK_SKIN) { emphasisColor = "white"; } string largestAssetCategoryLabel = string.Format( "<color={0}><size=20><b>{1}</b></size></color> are the largest,\ntaking up <color={0}><size=20><b>{2}%</b></size></color> of the build{3}", emphasisColor, buildReportToDisplay.BuildSizes[0].Name, buildReportToDisplay.BuildSizes[0].Percentage.ToString(CultureInfo.InvariantCulture), (!buildReportToDisplay.HasStreamingAssets ? "\n<size=12>(not counting streaming assets)</size>" : "")); GUILayout.Label(largestAssetCategoryLabel, BuildReportTool.Window.Settings.INFO_TEXT_STYLE_NAME); GUILayout.Space(20); GUILayout.EndVertical(); // 2nd column GUILayout.BeginVertical(GUILayout.MaxWidth(250)); GUILayout.Label("Made for:", BuildReportTool.Window.Settings.INFO_TITLE_STYLE_NAME); GUILayout.Label(buildReportToDisplay.BuildType, BuildReportTool.Window.Settings.INFO_SUBTITLE_STYLE_NAME); GUILayout.Label("Built in:", BuildReportTool.Window.Settings.INFO_TITLE_STYLE_NAME); GUILayout.Label(buildReportToDisplay.UnityVersionDisplayed, BuildReportTool.Window.Settings.INFO_SUBTITLE_STYLE_NAME); GUILayout.EndVertical(); DrawScenesInBuild(buildReportToDisplay.ScenesInBuild); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); var numberOfTopUsed = buildReportToDisplay.HasUsedAssets ? buildReportToDisplay.UsedAssets.NumberOfTopLargest : 0; var numberOfTopUnused = buildReportToDisplay.HasUnusedAssets ? buildReportToDisplay.UnusedAssets.NumberOfTopLargest : 0; if (Event.current.type == EventType.Layout) { _showTopUsed = numberOfTopUsed > 0 && buildReportToDisplay.UsedAssets.TopLargest != null; _showTopUnused = numberOfTopUnused > 0 && buildReportToDisplay.UnusedAssets.TopLargest != null; } // 1st column GUILayout.BeginVertical(); if (_showTopUsed) { GUILayout.Label(string.Format("Top {0} largest in build:", numberOfTopUsed.ToString()), BuildReportTool.Window.Settings.INFO_TITLE_STYLE_NAME); if (!BuildReportTool.Options.AutoResortAssetsWhenUnityEditorRegainsFocus && GUILayout.Button("Refresh", GUILayout.Height(20), GUILayout.MaxWidth(520))) { buildReportToDisplay.RecategorizeUsedAssets(); buildReportToDisplay.FlagOkToRefresh(); } DrawAssetList(buildReportToDisplay.UsedAssets, true, buildReportToDisplay, assetDependencies); } GUILayout.EndVertical(); GUILayout.Space(50); // 2nd column GUILayout.BeginVertical(); if (_showTopUnused) { GUILayout.Label(string.Format("Top {0} largest not in build:", numberOfTopUnused.ToString()), BuildReportTool.Window.Settings.INFO_TITLE_STYLE_NAME); if (!BuildReportTool.Options.AutoResortAssetsWhenUnityEditorRegainsFocus && GUILayout.Button("Refresh", GUILayout.Height(20), GUILayout.MaxWidth(520))) { buildReportToDisplay.RecategorizeUnusedAssets(); buildReportToDisplay.FlagOkToRefresh(); } DrawAssetList(buildReportToDisplay.UnusedAssets, false, buildReportToDisplay, assetDependencies); } GUILayout.EndVertical(); GUILayout.EndHorizontal(); GUILayout.EndVertical(); GUILayout.Space(20); if (assetDependencies != null && !string.IsNullOrEmpty(assetDependencies.SavedPath)) { GUILayout.Label("Asset Dependencies file used:", BuildReportTool.Window.Settings.SETTING_NAME_STYLE_NAME); GUILayout.Label(assetDependencies.SavedPath, BuildReportTool.Window.Settings.SETTING_VALUE_STYLE_NAME); GUILayout.Space(10); } if (textureData != null && !string.IsNullOrEmpty(textureData.SavedPath)) { GUILayout.Label("Texture Data file used:", BuildReportTool.Window.Settings.SETTING_NAME_STYLE_NAME); GUILayout.Label(textureData.SavedPath, BuildReportTool.Window.Settings.SETTING_VALUE_STYLE_NAME); GUILayout.Space(10); } if (unityBuildReport != null && !string.IsNullOrEmpty(unityBuildReport.SavedPath)) { GUILayout.Label("Additional Unity Build Report file used:", BuildReportTool.Window.Settings.SETTING_NAME_STYLE_NAME); GUILayout.Label(unityBuildReport.SavedPath, BuildReportTool.Window.Settings.SETTING_VALUE_STYLE_NAME); GUILayout.Space(10); } GUILayout.Space(20); GUILayout.EndVertical(); GUILayout.Space(20); // extra right padding GUILayout.EndHorizontal(); GUILayout.EndScrollView(); // ------------------------------------------------------ // Continually request repaint, since we need to check the rects // generated by the GUILayout (using GUILayoutUtility.GetLastRect()) // to make the hover checks work. That's because GetLastRect() only // works during repaint event. // // Later checks below can set requestRepaint to false if there's no // need to repaint, to help lessen cpu usage. requestRepaint = true; if (Event.current.mousePosition.y >= position.height || Event.current.mousePosition.y <= 0 || Event.current.mousePosition.x <= 0 || Event.current.mousePosition.x >= position.width) { // mouse is outside the window, no need to repaint, can't show tooltip anyway // set requestRepaint to false to help lessen cpu usage requestRepaint = false; } var showThumbnailNow = BuildReportTool.Options.ShowTooltipThumbnail && _shouldShowThumbnailOnHoveredAsset && (_assetUsedEntryHoveredIdx != -1 || _assetUnusedEntryHoveredIdx != -1); var zoomInChanged = false; if (showThumbnailNow) { var prevZoomedIn = BRT_BuildReportWindow.ZoomedInThumbnails; // if thumbnail is currently showing, we process the inputs // (ctrl zooms in on thumbnail, alt toggles alpha blend) BRT_BuildReportWindow.ProcessThumbnailControls(); if (prevZoomedIn != BRT_BuildReportWindow.ZoomedInThumbnails) { zoomInChanged = true; } } else { // no thumbnail currently shown. ensure the controls that // need to be reset to initial state are reset BRT_BuildReportWindow.ResetThumbnailControls(); } if (!zoomInChanged && !Event.current.alt && !BRT_BuildReportWindow.MouseMovedNow && !BRT_BuildReportWindow.LastMouseMoved) { // mouse hasn't moved, and no request to zoom-in thumbnail or toggle thumbnail alpha // no need to repaint because nothing has changed // set requestRepaint to false to help lessen cpu usage requestRepaint = false; } var shouldShowAssetEndUsersTooltipNow = BuildReportTool.Options.ShowAssetPrimaryUsersInTooltipIfAvailable && BRT_BuildReportWindow.ShouldHoveredAssetShowEndUserTooltip( assetDependencies) && (_assetUsedEntryHoveredIdx != -1 || _assetUnusedEntryHoveredIdx != -1); if (Event.current.type == EventType.Repaint) { if (showThumbnailNow && shouldShowAssetEndUsersTooltipNow) { // draw thumbnail and end users below it BRT_BuildReportWindow.DrawThumbnailEndUsersTooltip(position, assetDependencies, textureData); } else if (shouldShowAssetEndUsersTooltipNow) { // draw only end users in tooltip BRT_BuildReportWindow.DrawEndUsersTooltip(position, assetDependencies); } else if (showThumbnailNow) { // draw only thumbnail in tooltip BRT_BuildReportWindow.DrawThumbnailTooltip(position, textureData); } } }
public override void RefreshData(BuildInfo buildReport, AssetDependencies assetDependencies, TextureData textureData, UnityBuildReport unityBuildReport) { }
// ================================================================================================ public override void DrawGUI(Rect position, BuildInfo buildReportToDisplay, AssetDependencies assetDependencies, TextureData textureData, UnityBuildReport unityBuildReport, out bool requestRepaint) { requestRepaint = false; if (unityBuildReport == null) { return; } if (_logIcon == null) { var logIcons = GUI.skin.FindStyle("LogMessageIcons"); if (logIcons != null) { _logIcon = logIcons.normal.background; _warnIcon = logIcons.hover.background; _errorIcon = logIcons.active.background; _logFilterLabel.image = _logIcon; _warnFilterLabel.image = _warnIcon; _errorFilterLabel.image = _errorIcon; } } if (_indentLine == null) { _indentLine = GUI.skin.GetStyle("IndentStyle1").normal.background; } Texture2D prevArrow = GUI.skin.GetStyle(BuildReportTool.Window.Settings.BIG_LEFT_ARROW_ICON_STYLE_NAME).normal.background; Texture2D nextArrow = GUI.skin.GetStyle(BuildReportTool.Window.Settings.BIG_RIGHT_ARROW_ICON_STYLE_NAME).normal.background; var steps = unityBuildReport.BuildProcessSteps; if (steps == null) { return; } // -------------------------------- #region Steps float height = position.height * _buildStepsHeightPercent; var maxHeight = (steps.Length + 1) * 20; if (height > maxHeight) { height = maxHeight; } GUILayout.BeginHorizontal(GUILayout.Height(height)); #region Column 1 (Step Name) GUILayout.BeginVertical(BRT_BuildReportWindow.LayoutNone); GUILayout.Label("Step", BuildReportTool.Window.Settings.LIST_COLUMN_HEADER_STYLE_NAME); _scrollPos = GUILayout.BeginScrollView(_scrollPos, BuildReportTool.Window.Settings.HIDDEN_SCROLLBAR_STYLE_NAME, BuildReportTool.Window.Settings.HIDDEN_SCROLLBAR_STYLE_NAME, BRT_BuildReportWindow.LayoutNone); bool useAlt = true; for (int i = 0; i < steps.Length; ++i) { string styleToUse = useAlt ? BuildReportTool.Window.Settings.LIST_SMALL_ALT_STYLE_NAME : BuildReportTool.Window.Settings.LIST_SMALL_STYLE_NAME; if (i == _selectedStepIdx) { styleToUse = BuildReportTool.Window.Settings.LIST_SMALL_SELECTED_NAME; } GUILayout.BeginHorizontal(styleToUse); GUILayout.Space(steps[i].Depth * 20); if (GUILayout.Button(steps[i].Name, styleToUse, BRT_BuildReportWindow.LayoutListHeight)) { SelectStep(i, steps); } GUILayout.EndHorizontal(); if (Event.current.type == EventType.Repaint) { Rect labelRect = GUILayoutUtility.GetLastRect(); var prevColor = GUI.color; GUI.color = new Color(0, 0, 0, 0.5f); for (int indentN = 0, indentLen = steps[i].Depth; indentN < indentLen; ++indentN) { var indentRect = new Rect((indentN * 20), labelRect.y, 20, labelRect.height); GUI.DrawTexture(indentRect, _indentLine, ScaleMode.ScaleAndCrop); } GUI.color = prevColor; } useAlt = !useAlt; } GUILayout.EndScrollView(); GUILayout.EndVertical(); #endregion #region Column 2 (Warning Count) GUILayout.BeginVertical(BRT_BuildReportWindow.LayoutNone); GUILayout.Label("Warning Count", BuildReportTool.Window.Settings.LIST_COLUMN_HEADER_STYLE_NAME); _scrollPos = GUILayout.BeginScrollView(_scrollPos, BuildReportTool.Window.Settings.HIDDEN_SCROLLBAR_STYLE_NAME, BuildReportTool.Window.Settings.HIDDEN_SCROLLBAR_STYLE_NAME, BRT_BuildReportWindow.LayoutNone); useAlt = true; for (int i = 0; i < steps.Length; ++i) { string styleToUse = useAlt ? BuildReportTool.Window.Settings.LIST_SMALL_ALT_STYLE_NAME : BuildReportTool.Window.Settings.LIST_SMALL_STYLE_NAME; if (i == _selectedStepIdx) { styleToUse = BuildReportTool.Window.Settings.LIST_SMALL_SELECTED_NAME; } if (steps[i].WarnLogCount > 0) { if (GUILayout.Button(steps[i].WarnLogCount.ToString(), styleToUse, BRT_BuildReportWindow.LayoutListHeight)) { SelectStep(i, steps); } } else { GUILayout.Label(GUIContent.none, styleToUse, BRT_BuildReportWindow.LayoutListHeight); } useAlt = !useAlt; } GUILayout.EndScrollView(); GUILayout.EndVertical(); #endregion #region Column 3 (Error Count) GUILayout.BeginVertical(BRT_BuildReportWindow.LayoutNone); GUILayout.Label("Error Count", BuildReportTool.Window.Settings.LIST_COLUMN_HEADER_STYLE_NAME); _scrollPos = GUILayout.BeginScrollView(_scrollPos, BuildReportTool.Window.Settings.HIDDEN_SCROLLBAR_STYLE_NAME, BuildReportTool.Window.Settings.HIDDEN_SCROLLBAR_STYLE_NAME, BRT_BuildReportWindow.LayoutNone); useAlt = true; for (int i = 0; i < steps.Length; ++i) { string styleToUse = useAlt ? BuildReportTool.Window.Settings.LIST_SMALL_ALT_STYLE_NAME : BuildReportTool.Window.Settings.LIST_SMALL_STYLE_NAME; if (i == _selectedStepIdx) { styleToUse = BuildReportTool.Window.Settings.LIST_SMALL_SELECTED_NAME; } if (steps[i].ErrorLogCount > 0) { if (GUILayout.Button(steps[i].ErrorLogCount.ToString(), styleToUse, BRT_BuildReportWindow.LayoutListHeight)) { SelectStep(i, steps); } } else { GUILayout.Label(GUIContent.none, styleToUse, BRT_BuildReportWindow.LayoutListHeight); } useAlt = !useAlt; } GUILayout.EndScrollView(); GUILayout.EndVertical(); #endregion #region Last Column (Duration) GUILayout.BeginVertical(BRT_BuildReportWindow.LayoutNone); GUILayout.Label("Duration", BuildReportTool.Window.Settings.LIST_COLUMN_HEADER_STYLE_NAME); _scrollPos = GUILayout.BeginScrollView(_scrollPos, BuildReportTool.Window.Settings.HIDDEN_SCROLLBAR_STYLE_NAME, "verticalscrollbar", BRT_BuildReportWindow.LayoutNone); useAlt = true; for (int i = 0; i < steps.Length; ++i) { string styleToUse = useAlt ? BuildReportTool.Window.Settings.LIST_SMALL_ALT_STYLE_NAME : BuildReportTool.Window.Settings.LIST_SMALL_STYLE_NAME; if (i == _selectedStepIdx) { styleToUse = BuildReportTool.Window.Settings.LIST_SMALL_SELECTED_NAME; } string duration; if (i == 0) { duration = unityBuildReport.TotalBuildTime.ToReadableString(); } else { duration = steps[i].Duration.ToReadableString(); } GUILayout.Label(duration, styleToUse, BRT_BuildReportWindow.LayoutListHeight); useAlt = !useAlt; } GUILayout.EndScrollView(); GUILayout.EndVertical(); #endregion GUILayout.EndHorizontal(); if (Event.current.type == EventType.Repaint) { _stepsViewRect = GUILayoutUtility.GetLastRect(); } #endregion // -------------------------------- #region Logs GUILayout.BeginHorizontal(); GUILayout.BeginVertical(BRT_BuildReportWindow.LayoutNone); #region Logs Toolbar GUILayout.BeginHorizontal(BuildReportTool.Window.Settings.TOP_BAR_BG_STYLE_NAME, BRT_BuildReportWindow.LayoutHeight18); GUILayout.Space(10); string logMessagesTitle; bool hasStepSelected = _selectedStepIdx != -1 && steps[_selectedStepIdx].BuildLogMessages != null && steps[_selectedStepIdx].BuildLogMessages.Length > 0; if (hasStepSelected) { logMessagesTitle = string.Format("Log Messages of: <i>{0}</i>", steps[_selectedStepIdx].Name); } else { logMessagesTitle = "Log Messages (Total)"; } GUILayout.Label(logMessagesTitle, BuildReportTool.Window.Settings.TOP_BAR_LABEL_STYLE_NAME, BRT_BuildReportWindow.LayoutNoExpandWidth); if (Event.current.type == EventType.Repaint) { _dividerRect = GUILayoutUtility.GetLastRect(); } GUILayout.FlexibleSpace(); int messagePaginationLength = BuildReportTool.Options.LogMessagePaginationLength; if (GUILayout.Button(prevArrow, BuildReportTool.Window.Settings.TOP_BAR_BTN_STYLE_NAME, BRT_BuildReportWindow.LayoutNone) && (_logMessageToShowStartOffset - messagePaginationLength >= 0)) { _logMessageToShowStartOffset -= messagePaginationLength; } if (Event.current.type == EventType.Repaint) { var prevArrowRect = GUILayoutUtility.GetLastRect(); _dividerRect.xMax = prevArrowRect.x; } string paginateLabel; if (_showPageNumbers) { int totalPageNumbers = _totalVisibleMessageCount / messagePaginationLength; if (_totalVisibleMessageCount % messagePaginationLength > 0) { ++totalPageNumbers; } // the max number of digits for the displayed offset counters string assetCountDigitNumFormat = string.Format("D{0}", totalPageNumbers.ToString().Length.ToString()); paginateLabel = string.Format("Page {0} of {1}", ((_logMessageToShowStartOffset / messagePaginationLength) + 1).ToString(assetCountDigitNumFormat), totalPageNumbers.ToString()); } else { // number of assets in current page int pageLength = Mathf.Min(_logMessageToShowStartOffset + messagePaginationLength, _totalVisibleMessageCount); int offsetNonZeroBased = _logMessageToShowStartOffset + (pageLength > 0 ? 1 : 0); // the max number of digits for the displayed offset counters string assetCountDigitNumFormat = string.Format("D{0}", _totalVisibleMessageCount.ToString().Length.ToString()); paginateLabel = string.Format("Page {0} - {1} of {2}", offsetNonZeroBased.ToString(assetCountDigitNumFormat), pageLength.ToString(assetCountDigitNumFormat), _totalVisibleMessageCount.ToString(assetCountDigitNumFormat)); } if (GUILayout.Button(paginateLabel, BuildReportTool.Window.Settings.TOP_BAR_LABEL_STYLE_NAME, BRT_BuildReportWindow.LayoutNone)) { _showPageNumbers = !_showPageNumbers; } if (GUILayout.Button(nextArrow, BuildReportTool.Window.Settings.TOP_BAR_BTN_STYLE_NAME, BRT_BuildReportWindow.LayoutNone) && (_logMessageToShowStartOffset + messagePaginationLength < _totalVisibleMessageCount)) { _logMessageToShowStartOffset += messagePaginationLength; } GUILayout.Space(8); var newShowLogMessagesCollapsed = GUILayout.Toggle(_showLogMessagesCollapsed, "Collapse", BuildReportTool.Window.Settings.TOP_BAR_BTN_STYLE_NAME, BRT_BuildReportWindow.LayoutNoExpandWidth); if (newShowLogMessagesCollapsed != _showLogMessagesCollapsed) { _showLogMessagesCollapsed = newShowLogMessagesCollapsed; RefreshTotalVisibleMessageCount(); } GUILayout.Space(8); bool newShowLogMessages = GUILayout.Toggle(_showLogMessages, _logFilterLabel, BuildReportTool.Window.Settings.TOP_BAR_BTN_STYLE_NAME, BRT_BuildReportWindow.LayoutNoExpandWidth); bool newShowWarnMessages = GUILayout.Toggle(_showWarnMessages, _warnFilterLabel, BuildReportTool.Window.Settings.TOP_BAR_BTN_STYLE_NAME, BRT_BuildReportWindow.LayoutNoExpandWidth); bool newShowErrorMessages = GUILayout.Toggle(_showErrorMessages, _errorFilterLabel, BuildReportTool.Window.Settings.TOP_BAR_BTN_STYLE_NAME, BRT_BuildReportWindow.LayoutNoExpandWidth); if (newShowLogMessages != _showLogMessages) { _showLogMessages = newShowLogMessages; RefreshTotalVisibleMessageCount(); } if (newShowWarnMessages != _showWarnMessages) { _showWarnMessages = newShowWarnMessages; RefreshTotalVisibleMessageCount(); } if (newShowErrorMessages != _showErrorMessages) { _showErrorMessages = newShowErrorMessages; RefreshTotalVisibleMessageCount(); } GUILayout.Space(8); GUILayout.EndHorizontal(); EditorGUIUtility.AddCursorRect(_dividerRect, MouseCursor.ResizeVertical); #endregion if (Event.current.type == EventType.MouseDown && Event.current.button == 0 && _dividerRect.Contains(Event.current.mousePosition)) { _draggingDivider = true; _mouseYOnDividerDragStart = Event.current.mousePosition.y; _heightOnDividerDragStart = height; requestRepaint = true; } if (Event.current.type == EventType.MouseUp) { _draggingDivider = false; requestRepaint = true; } if (_draggingDivider) { var newHeight = _heightOnDividerDragStart + (Event.current.mousePosition.y - _mouseYOnDividerDragStart); _buildStepsHeightPercent = newHeight / position.height; requestRepaint = true; } _logMessagesScrollPos = GUILayout.BeginScrollView(_logMessagesScrollPos, BuildReportTool.Window.Settings.HIDDEN_SCROLLBAR_STYLE_NAME, "verticalscrollbar", BRT_BuildReportWindow.LayoutNone); if (_showLogMessages || _showWarnMessages || _showErrorMessages) { if (hasStepSelected) { BuildLogMessage[] messages; if (_showLogMessagesCollapsed) { messages = steps[_selectedStepIdx].CollapsedBuildLogMessages; } else { messages = steps[_selectedStepIdx].BuildLogMessages; } int totalToShow = 0; if (_showLogMessages) { totalToShow += steps[_selectedStepIdx].InfoLogCount; } if (_showWarnMessages) { totalToShow += steps[_selectedStepIdx].WarnLogCount; } if (_showErrorMessages) { totalToShow += steps[_selectedStepIdx].ErrorLogCount; } if (totalToShow > 0) { useAlt = true; int messageToStartIdx = 0; int messageToStartCount = 0; for (int m = 0; m < messages.Length; ++m) { var logTypeIcon = GetLogIcon(messages[m].LogType); if (logTypeIcon == _logIcon && !_showLogMessages) { continue; } if (logTypeIcon == _warnIcon && !_showWarnMessages) { continue; } if (logTypeIcon == _errorIcon && !_showErrorMessages) { continue; } ++messageToStartCount; if (messageToStartCount - 1 == _logMessageToShowStartOffset) { messageToStartIdx = m; break; } } DrawMessages(messages, messageToStartIdx, messagePaginationLength, _selectedStepIdx, 0, ref useAlt, ref requestRepaint); } } else { useAlt = true; int messageToStartIdx = 0; int stepToStartIdx = 0; int messageToStartCount = 0; for (int s = 0; s < steps.Length; ++s) { var step = steps[s]; BuildLogMessage[] messages; if (_showLogMessagesCollapsed) { messages = step.CollapsedBuildLogMessages; } else { messages = step.BuildLogMessages; } if (messages == null || messages.Length == 0) { continue; } int totalToShow = 0; if (_showLogMessages) { totalToShow += step.InfoLogCount; } if (_showWarnMessages) { totalToShow += step.WarnLogCount; } if (_showErrorMessages) { totalToShow += step.ErrorLogCount; } if (totalToShow == 0) { continue; } for (int m = 0; m < messages.Length; ++m) { var logTypeIcon = GetLogIcon(messages[m].LogType); if (logTypeIcon == _logIcon && !_showLogMessages) { continue; } if (logTypeIcon == _warnIcon && !_showWarnMessages) { continue; } if (logTypeIcon == _errorIcon && !_showErrorMessages) { continue; } ++messageToStartCount; if (messageToStartCount - 1 == _logMessageToShowStartOffset) { messageToStartIdx = m; stepToStartIdx = s; break; } } } int totalShownSoFar = 0; for (int s = stepToStartIdx; s < steps.Length; ++s) { var step = steps[s]; BuildLogMessage[] messages; if (_showLogMessagesCollapsed) { messages = step.CollapsedBuildLogMessages; } else { messages = step.BuildLogMessages; } if (messages == null || messages.Length == 0) { continue; } int totalToShow = 0; if (_showLogMessages) { if (_showLogMessagesCollapsed) { totalToShow += step.CollapsedInfoLogCount; } else { totalToShow += step.InfoLogCount; } } if (_showWarnMessages) { if (_showLogMessagesCollapsed) { totalToShow += step.CollapsedWarnLogCount; } else { totalToShow += step.WarnLogCount; } } if (_showErrorMessages) { if (_showLogMessagesCollapsed) { totalToShow += step.CollapsedErrorLogCount; } else { totalToShow += step.ErrorLogCount; } } if (totalToShow == 0) { continue; } string styleToUse = useAlt ? BuildReportTool.Window.Settings.LIST_SMALL_ALT_STYLE_NAME : BuildReportTool.Window.Settings.LIST_SMALL_STYLE_NAME; GUILayout.BeginHorizontal(styleToUse, BRT_BuildReportWindow.LayoutNone); GUILayout.Space(8); GUILayout.Button(step.Name, styleToUse, BRT_BuildReportWindow.LayoutHeight25); GUILayout.EndHorizontal(); useAlt = !useAlt; DrawMessages(messages, messageToStartIdx, messagePaginationLength - totalShownSoFar, s, 20, ref useAlt, ref requestRepaint); totalShownSoFar += totalToShow; if (totalShownSoFar >= messagePaginationLength) { break; } } } } GUILayout.EndScrollView(); GUILayout.EndVertical(); GUILayout.EndHorizontal(); #endregion // if clicked on nothing interactable, then remove selection if (GUI.Button(_stepsViewRect, GUIContent.none, "HiddenScrollbar")) { SelectStep(-1, steps); } }
public abstract void DrawGUI(Rect position, BuildInfo buildReportToDisplay, AssetDependencies assetDependencies, TextureData textureData, UnityBuildReport unityBuildReport, out bool requestRepaint );
public abstract void RefreshData(BuildInfo buildReport, AssetDependencies assetDependencies, TextureData textureData, UnityBuildReport unityBuildReport);
public override void DrawGUI(Rect position, BuildInfo buildReportToDisplay, AssetDependencies assetDependencies, out bool requestRepaint) { requestRepaint = false; var prevEnabled = GUI.enabled; GUILayout.Space(10); // extra top padding _assetListScrollPos = GUILayout.BeginScrollView(_assetListScrollPos); GUILayout.BeginHorizontal(); GUILayout.Space(20); // extra left padding GUILayout.BeginVertical(); if (!string.IsNullOrEmpty(BuildReportTool.Options.FoundPathForSavedOptions)) { GUILayout.BeginHorizontal(BuildReportTool.Window.Settings.BOXED_LABEL_STYLE_NAME); GUILayout.Label(string.Format("Using options file in: {0}", BuildReportTool.Options.FoundPathForSavedOptions)); GUILayout.FlexibleSpace(); if (GUILayout.Button("Reload")) { BuildReportTool.Options.RefreshOptions(); } GUILayout.EndHorizontal(); GUILayout.Space(10); } // === Main Options === GUILayout.Label("Main Options", BuildReportTool.Window.Settings.INFO_TITLE_STYLE_NAME); BuildReportTool.Options.CollectBuildInfo = GUILayout.Toggle(BuildReportTool.Options.CollectBuildInfo, "Automatically generate and save a Build Report file after building (does not include batchmode builds)"); GUILayout.BeginHorizontal(); GUILayout.Space(20); GUILayout.Label( "Note: For batchmode builds, to create build reports, call BuildReportTool.ReportGenerator.CreateReport() after BuildPipeline.BuildPlayer() in your build scripts. The Build Report is automatically saved as an XML file.", BuildReportTool.Window.Settings.BOXED_LABEL_STYLE_NAME, GUILayout.MaxWidth(525)); GUILayout.EndHorizontal(); GUILayout.Space(10); BuildReportTool.Options.AutoShowWindowAfterNormalBuild = GUILayout.Toggle( BuildReportTool.Options.AutoShowWindowAfterNormalBuild, "Automatically show Build Report Window after building (if it is not open yet)"); BuildReportTool.Options.AutoResortAssetsWhenUnityEditorRegainsFocus = GUILayout.Toggle( BuildReportTool.Options.AutoResortAssetsWhenUnityEditorRegainsFocus, "Re-sort assets automatically whenever the Unity Editor regains focus"); BuildReportTool.Options.AllowDeletingOfUsedAssets = GUILayout.Toggle( BuildReportTool.Options.AllowDeletingOfUsedAssets, "Allow deleting of Used Assets (practice caution!)"); GUILayout.Space(20); BuildReportTool.Options.UseThreadedReportGeneration = GUILayout.Toggle( BuildReportTool.Options.UseThreadedReportGeneration, "When generating Build Reports, use a separate thread"); GUILayout.BeginHorizontal(GUILayout.ExpandWidth(false)); GUILayout.Space(20); GUILayout.Label( "Note: For batchmode builds, report generation with BuildReportTool.ReportGenerator.CreateReport() is always non-threaded.", BuildReportTool.Window.Settings.BOXED_LABEL_STYLE_NAME, GUILayout.MaxWidth(525)); GUILayout.EndHorizontal(); GUILayout.Space(10); BuildReportTool.Options.UseThreadedFileLoading = GUILayout.Toggle( BuildReportTool.Options.UseThreadedFileLoading, "When loading Build Report files, use a separate thread"); //GUILayout.Space(20); GUILayout.Space(BuildReportTool.Window.Settings.CATEGORY_VERTICAL_SPACING); // === Data to include in the Build Report === GUILayout.Label("Data to include in the Build Report", BuildReportTool.Window.Settings.INFO_TITLE_STYLE_NAME); BuildReportTool.Options.IncludeBuildSizeInReportCreation = GUILayout.Toggle( BuildReportTool.Options.IncludeBuildSizeInReportCreation, "Get build's file size upon creation of a build report"); GUILayout.Space(10); //BuildReportTool.Options.GetImportedSizesForUsedAssets = GUILayout.Toggle(BuildReportTool.Options.GetImportedSizesForUsedAssets, // "Get imported sizes of Used Assets upon creation of a build report"); BuildReportTool.Options.GetImportedSizesForUnusedAssets = GUILayout.Toggle( BuildReportTool.Options.GetImportedSizesForUnusedAssets, "Get imported sizes of Unused Assets upon creation of a build report"); BuildReportTool.Options.GetSizeBeforeBuildForUsedAssets = GUILayout.Toggle( BuildReportTool.Options.GetSizeBeforeBuildForUsedAssets, "Get size-before-build of Used Assets upon creation of a build report"); BuildReportTool.Options.IncludeSvnInUnused = GUILayout.Toggle(BuildReportTool.Options.IncludeSvnInUnused, Labels.INCLUDE_SVN_LABEL); BuildReportTool.Options.IncludeGitInUnused = GUILayout.Toggle(BuildReportTool.Options.IncludeGitInUnused, Labels.INCLUDE_GIT_LABEL); GUILayout.Space(10); BuildReportTool.Options.GetProjectSettings = GUILayout.Toggle(BuildReportTool.Options.GetProjectSettings, "Get Unity project settings upon creation of a build report"); GUILayout.Space(10); BuildReportTool.Options.CalculateAssetDependencies = GUILayout.Toggle( BuildReportTool.Options.CalculateAssetDependencies, "Calculate asset dependencies upon creation of a build report"); BuildReportTool.Options.CalculateAssetDependenciesOnUnusedToo = GUILayout.Toggle( BuildReportTool.Options.CalculateAssetDependenciesOnUnusedToo, "Include Unused Assets in asset dependency calculations"); GUILayout.Space(10); BuildReportTool.Options.ShowImportedSizeForUsedAssets = GUILayout.Toggle( BuildReportTool.Options.ShowImportedSizeForUsedAssets, "Show calculated sizes of Used Assets instead of reported sizes"); if (_linkStyle == null) { _linkStyle = new GUIStyle(GUI.skin.label); _linkStyle.normal.textColor = new Color(0.266f, 0.533f, 1); _linkStyle.hover.textColor = new Color(0.118f, 0.396f, 1); _linkStyle.stretchWidth = false; _linkStyle.margin.bottom = 0; _linkStyle.padding.bottom = 0; } if (_textBesideLinkStyle == null) { _textBesideLinkStyle = new GUIStyle(GUI.skin.label); _textBesideLinkStyle.stretchWidth = false; _textBesideLinkStyle.margin.right = 0; _textBesideLinkStyle.padding.right = 0; _textBesideLinkStyle.margin.bottom = 0; _textBesideLinkStyle.padding.bottom = 0; } GUILayout.BeginHorizontal(); GUILayout.Label("Note: This option is a workaround for the ", _textBesideLinkStyle); if (GUILayout.Button("Unity bug with Issue ID 885258", _linkStyle)) { Application.OpenURL( "https://issuetracker.unity3d.com/issues/unity-reports-incorrect-textures-size-in-the-editor-dot-log-after-building-on-standalone"); } GUILayout.EndHorizontal(); GUILayout.Label( "This bug has already been fixed in Unity 2017.1, 5.5.3p1 and 5.6.0p1. Only enable this if you are affected by the bug."); GUILayout.Space(15); GUILayout.BeginHorizontal(); GUILayout.Label("Calculation Level: "); GUILayout.BeginVertical(); int newSelectedCalculationLevelIdx = EditorGUILayout.Popup(_selectedCalculationLevelIdx, CalculationTypeLabels, "Popup", GUILayout.Width(300)); GUILayout.BeginHorizontal(); GUILayout.Space(20); GUILayout.Label(CalculationLevelDescription, GUILayout.MaxWidth(500), GUILayout.MinHeight(75)); GUILayout.EndHorizontal(); GUILayout.EndVertical(); GUILayout.FlexibleSpace(); GUILayout.EndHorizontal(); GUILayout.Space(BuildReportTool.Window.Settings.CATEGORY_VERTICAL_SPACING); if (newSelectedCalculationLevelIdx != _selectedCalculationLevelIdx) { _selectedCalculationLevelIdx = newSelectedCalculationLevelIdx; SetCalculationLevelFromGuiIdx(newSelectedCalculationLevelIdx); } // === Editor Log File === GUILayout.Label("Editor Log File", BuildReportTool.Window.Settings.INFO_TITLE_STYLE_NAME); // which Editor.log is used GUILayout.BeginHorizontal(); GUILayout.Label(Labels.EDITOR_LOG_LABEL + BuildReportTool.Util.EditorLogPathOverrideMessage + ": " + BuildReportTool.Util.UsedEditorLogPath); if (GUILayout.Button(OPEN_IN_FILE_BROWSER_OS_SPECIFIC_LABEL) && BuildReportTool.Util.UsedEditorLogExists) { BuildReportTool.Util.OpenInFileBrowser(BuildReportTool.Util.UsedEditorLogPath); } GUILayout.FlexibleSpace(); GUILayout.EndHorizontal(); if (!BuildReportTool.Util.UsedEditorLogExists) { if (BuildReportTool.Util.IsDefaultEditorLogPathOverridden) { GUILayout.Label(Labels.OVERRIDE_LOG_NOT_FOUND_MSG); } else { GUILayout.Label(Labels.DEFAULT_EDITOR_LOG_NOT_FOUND_MSG); } } // override which log is opened GUILayout.BeginHorizontal(); if (GUILayout.Button(Labels.SET_OVERRIDE_LOG_LABEL)) { string filepath = EditorUtility.OpenFilePanel( "", // title "", // default path ""); // file type (only one type allowed?) if (!string.IsNullOrEmpty(filepath)) { BuildReportTool.Options.EditorLogOverridePath = filepath; } } if (GUILayout.Button(Labels.CLEAR_OVERRIDE_LOG_LABEL)) { BuildReportTool.Options.EditorLogOverridePath = ""; } GUILayout.FlexibleSpace(); GUILayout.EndHorizontal(); GUILayout.Space(BuildReportTool.Window.Settings.CATEGORY_VERTICAL_SPACING); // === Asset Lists === GUILayout.Label("Asset Lists", BuildReportTool.Window.Settings.INFO_TITLE_STYLE_NAME); // top largest used GUILayout.BeginHorizontal(); GUILayout.Label("Number of Top Largest Used Assets to display in Overview Tab:"); string numberOfTopUsedInput = GUILayout.TextField(BuildReportTool.Options.NumberOfTopLargestUsedAssetsToShow.ToString(), GUILayout.MinWidth(100)); numberOfTopUsedInput = Regex.Replace(numberOfTopUsedInput, @"[^0-9]", ""); // positive numbers only, no fractions if (string.IsNullOrEmpty(numberOfTopUsedInput)) { numberOfTopUsedInput = "0"; } BuildReportTool.Options.NumberOfTopLargestUsedAssetsToShow = int.Parse(numberOfTopUsedInput); GUILayout.FlexibleSpace(); GUILayout.EndHorizontal(); // top largest unused GUILayout.BeginHorizontal(); GUILayout.Label("Number of Top Largest Unused Assets to display in Overview Tab:"); string numberOfTopUnusedInput = GUILayout.TextField(BuildReportTool.Options.NumberOfTopLargestUnusedAssetsToShow.ToString(), GUILayout.MinWidth(100)); numberOfTopUnusedInput = Regex.Replace(numberOfTopUnusedInput, @"[^0-9]", ""); // positive numbers only, no fractions if (string.IsNullOrEmpty(numberOfTopUnusedInput)) { numberOfTopUnusedInput = "0"; } BuildReportTool.Options.NumberOfTopLargestUnusedAssetsToShow = int.Parse(numberOfTopUnusedInput); GUILayout.FlexibleSpace(); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Space(20); GUILayout.Label( "Note: To disable the display of Top Largest Assets, use a value of 0.", BuildReportTool.Window.Settings.BOXED_LABEL_STYLE_NAME, GUILayout.MaxWidth(525)); GUILayout.EndHorizontal(); GUILayout.Space(10); // pagination length GUILayout.BeginHorizontal(); GUILayout.Label("View assets per groups of:"); string pageInput = GUILayout.TextField(BuildReportTool.Options.AssetListPaginationLength.ToString(), GUILayout.MinWidth(100)); pageInput = Regex.Replace(pageInput, @"[^0-9]", ""); // positive numbers only, no fractions if (string.IsNullOrEmpty(pageInput)) { pageInput = "0"; } BuildReportTool.Options.AssetListPaginationLength = int.Parse(pageInput); GUILayout.FlexibleSpace(); GUILayout.EndHorizontal(); GUILayout.Space(10); // unused assets entries per batch GUILayout.BeginHorizontal(); GUILayout.Label("Process unused assets per batches of:"); string entriesPerBatchInput = GUILayout.TextField(BuildReportTool.Options.UnusedAssetsEntriesPerBatch.ToString(), GUILayout.MinWidth(100)); entriesPerBatchInput = Regex.Replace(entriesPerBatchInput, @"[^0-9]", ""); // positive numbers only, no fractions if (string.IsNullOrEmpty(entriesPerBatchInput)) { entriesPerBatchInput = "0"; } BuildReportTool.Options.UnusedAssetsEntriesPerBatch = int.Parse(entriesPerBatchInput); GUILayout.FlexibleSpace(); GUILayout.EndHorizontal(); GUILayout.Space(10); // choose which file filter group to use GUILayout.BeginHorizontal(); GUILayout.Label(Labels.FILTER_GROUP_TO_USE_LABEL); BuildReportTool.Options.FilterToUseInt = GUILayout.SelectionGrid(BuildReportTool.Options.FilterToUseInt, FileFilterToUseType, FileFilterToUseType.Length); GUILayout.FlexibleSpace(); GUILayout.EndHorizontal(); // display which file filter group is used GUILayout.BeginHorizontal(); GUILayout.Label(Labels.FILTER_GROUP_FILE_PATH_LABEL + BuildReportTool .FiltersUsed.GetProperFileFilterGroupToUseFilePath()); // display path to used file filter if (GUILayout.Button(OPEN_IN_FILE_BROWSER_OS_SPECIFIC_LABEL)) { BuildReportTool.Util.OpenInFileBrowser(BuildReportTool.FiltersUsed.GetProperFileFilterGroupToUseFilePath()); } GUILayout.FlexibleSpace(); GUILayout.EndHorizontal(); GUILayout.Space(10); GUILayout.BeginHorizontal(); GUILayout.Label("Asset Ping method:"); BuildReportTool.Options.DoubleClickOnAssetWillPing = GUILayout.SelectionGrid( BuildReportTool.Options.DoubleClickOnAssetWillPing ? 1 : 0, AssetPingTypeLabels, 2, GUILayout.Height(26)) == 1; GUILayout.FlexibleSpace(); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Space(20); GUILayout.Label( BuildReportTool.Options.DoubleClickOnAssetWillPing ? "Note: To ping multiple assets, select the assets, and hold Alt while double-clicking one of them." : "Note: To ping multiple assets, select the assets, and hold Alt while pressing one of their Ping buttons.", BuildReportTool.Window.Settings.BOXED_LABEL_STYLE_NAME, GUILayout.MaxWidth(593)); GUILayout.EndHorizontal(); GUILayout.Space(10); //AssetUsageLabelTypeLabels GUILayout.BeginHorizontal(); GUILayout.Label("Asset usage labels:"); BuildReportTool.Options.AssetUsageLabelType = GUILayout.SelectionGrid( BuildReportTool.Options.AssetUsageLabelType, AssetUsageLabelTypeLabels, 1); GUILayout.FlexibleSpace(); GUILayout.EndHorizontal(); GUILayout.Space(10); BuildReportTool.Options.ShowAssetPrimaryUsersInTooltipIfAvailable = GUILayout.Toggle( BuildReportTool.Options.ShowAssetPrimaryUsersInTooltipIfAvailable, "Show end users in asset tooltip (if available)"); GUILayout.BeginHorizontal(); GUILayout.Space(20); GUILayout.Label( "Note: \"End users\" are the scenes (or Resources assets) that use a given asset (directly or indirectly), they are the main reason why that asset got included in the build.", BuildReportTool.Window.Settings.BOXED_LABEL_STYLE_NAME, GUILayout.MaxWidth(525)); GUILayout.EndHorizontal(); GUILayout.Space(10); BuildReportTool.Options.ShowTooltipThumbnail = GUILayout.Toggle( BuildReportTool.Options.ShowTooltipThumbnail, "Show thumbnail in asset tooltip"); GUI.enabled = prevEnabled && BuildReportTool.Options.ShowTooltipThumbnail; GUILayout.BeginHorizontal(); GUILayout.Label("Show thumbnail when:"); BuildReportTool.Options.ShowThumbnailOnHoverType = GUILayout.SelectionGrid( BuildReportTool.Options.ShowThumbnailOnHoverType, ShowThumbnailOnHoverTypeLabels, ShowThumbnailOnHoverTypeLabels.Length, GUILayout.Height(26)); GUILayout.FlexibleSpace(); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Label("Thumbnail Tooltip Width:"); string tooltipThumbnailWidthInput = GUILayout.TextField(BuildReportTool.Options.TooltipThumbnailWidth.ToString(), GUILayout.MinWidth(100)); tooltipThumbnailWidthInput = Regex.Replace(tooltipThumbnailWidthInput, @"[^0-9]", ""); // positive numbers only, no fractions if (string.IsNullOrEmpty(tooltipThumbnailWidthInput)) { tooltipThumbnailWidthInput = "0"; } BuildReportTool.Options.TooltipThumbnailWidth = int.Parse(tooltipThumbnailWidthInput); GUILayout.Space(3); GUILayout.Label("Height:"); string tooltipThumbnailHeightInput = GUILayout.TextField(BuildReportTool.Options.TooltipThumbnailHeight.ToString(), GUILayout.MinWidth(100)); tooltipThumbnailHeightInput = Regex.Replace(tooltipThumbnailHeightInput, @"[^0-9]", ""); // positive numbers only, no fractions if (string.IsNullOrEmpty(tooltipThumbnailHeightInput)) { tooltipThumbnailHeightInput = "0"; } BuildReportTool.Options.TooltipThumbnailHeight = int.Parse(tooltipThumbnailHeightInput); GUILayout.FlexibleSpace(); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Label("Thumbnail Tooltip Zoomed-in Width:"); string tooltipThumbnailZoomedInWidthInput = GUILayout.TextField(BuildReportTool.Options.TooltipThumbnailZoomedInWidth.ToString(), GUILayout.MinWidth(100)); tooltipThumbnailZoomedInWidthInput = Regex.Replace(tooltipThumbnailZoomedInWidthInput, @"[^0-9]", ""); // positive numbers only, no fractions if (string.IsNullOrEmpty(tooltipThumbnailZoomedInWidthInput)) { tooltipThumbnailZoomedInWidthInput = "0"; } BuildReportTool.Options.TooltipThumbnailZoomedInWidth = int.Parse(tooltipThumbnailZoomedInWidthInput); GUILayout.Space(3); GUILayout.Label("Height:"); string tooltipThumbnailZoomedInHeightInput = GUILayout.TextField(BuildReportTool.Options.TooltipThumbnailZoomedInHeight.ToString(), GUILayout.MinWidth(100)); tooltipThumbnailZoomedInHeightInput = Regex.Replace(tooltipThumbnailZoomedInHeightInput, @"[^0-9]", ""); // positive numbers only, no fractions if (string.IsNullOrEmpty(tooltipThumbnailZoomedInHeightInput)) { tooltipThumbnailZoomedInHeightInput = "0"; } BuildReportTool.Options.TooltipThumbnailZoomedInHeight = int.Parse(tooltipThumbnailZoomedInHeightInput); GUILayout.FlexibleSpace(); GUILayout.EndHorizontal(); GUI.enabled = prevEnabled; GUILayout.BeginHorizontal(); GUILayout.Space(20); GUILayout.Label( "Note: Hold Ctrl while a thumbnail tooltip is shown to zoom-in.", BuildReportTool.Window.Settings.BOXED_LABEL_STYLE_NAME, GUILayout.MaxWidth(525)); GUILayout.EndHorizontal(); GUILayout.Space(BuildReportTool.Window.Settings.CATEGORY_VERTICAL_SPACING); // === Build Report Files === GUILayout.Label("Build Report Files", BuildReportTool.Window.Settings.INFO_TITLE_STYLE_NAME); // build report files save path GUILayout.BeginHorizontal(); GUILayout.Label(Labels.SAVE_PATH_LABEL + BuildReportTool.Options.BuildReportSavePath); if (GUILayout.Button(OPEN_IN_FILE_BROWSER_OS_SPECIFIC_LABEL)) { BuildReportTool.Util.OpenInFileBrowser(BuildReportTool.Options.BuildReportSavePath); } GUILayout.FlexibleSpace(); GUILayout.EndHorizontal(); // change name of build reports folder GUILayout.BeginHorizontal(); GUILayout.Label(Labels.SAVE_FOLDER_NAME_LABEL); BuildReportTool.Options.BuildReportFolderName = GUILayout.TextField(BuildReportTool.Options.BuildReportFolderName, GUILayout.MinWidth(250)); GUILayout.FlexibleSpace(); GUILayout.EndHorizontal(); // where to save build reports (my docs/home, or beside project) GUILayout.BeginHorizontal(); GUILayout.Label(Labels.SAVE_PATH_TYPE_LABEL); if (_saveTypeLabels == null) { _saveTypeLabels = new[] { SAVE_PATH_TYPE_PERSONAL_OS_SPECIFIC_LABEL, Labels.SAVE_PATH_TYPE_PROJECT_LABEL }; } BuildReportTool.Options.SaveType = GUILayout.SelectionGrid(BuildReportTool.Options.SaveType, _saveTypeLabels, _saveTypeLabels.Length); GUILayout.FlexibleSpace(); GUILayout.EndHorizontal(); GUILayout.Space(BuildReportTool.Window.Settings.CATEGORY_VERTICAL_SPACING); GUILayout.EndVertical(); GUILayout.Space(20); // extra right padding GUILayout.EndHorizontal(); GUILayout.EndScrollView(); //if (BuildReportTool.Options.SaveType == BuildReportTool.Options.SAVE_TYPE_PERSONAL) //{ // changed to user's personal folder //BuildReportTool.ReportGenerator.ChangeSavePathToUserPersonalFolder(); //} //else if (BuildReportTool.Options.SaveType == BuildReportTool.Options.SAVE_TYPE_PROJECT) //{ // changed to project folder //BuildReportTool.ReportGenerator.ChangeSavePathToProjectFolder(); //} }
public abstract void DrawGUI(Rect position, BuildInfo buildReportToDisplay, AssetDependencies assetDependencies, out bool requestRepaint);
static void AssignHoveredAssetEndUsers(AssetDependencies assetDependencies) { BuildReportTool.AssetDependencies.PopulateAssetEndUsers(HoveredAssetEntryPath, assetDependencies); }
public virtual void Update(double timeNow, double deltaTime, BuildInfo buildReportToDisplay, AssetDependencies assetDependencies) { }
public override void DrawGUI(Rect position, BuildInfo buildReportToDisplay, AssetDependencies assetDependencies, out bool requestRepaint) { BuildSettingCategory b = ReportGenerator.GetBuildSettingCategoryFromBuildValues(buildReportToDisplay); _buildTargetOfReport = UnityBuildSettingsUtility.GetReadableBuildSettingCategory(b); UnityBuildSettings settings = buildReportToDisplay.UnityBuildSettings; if (settings == null) { Utility.DrawCentralMessage(position, "No \"Project Settings\" recorded in this build report."); requestRepaint = false; return; } // ---------------------------------------------------------- // top bar GUILayout.Space(1); GUILayout.BeginHorizontal(); GUILayout.Label(" ", BuildReportTool.Window.Settings.TOP_BAR_BG_STYLE_NAME); GUILayout.Space(8); GUILayout.Label("Build Target: ", BuildReportTool.Window.Settings.TOP_BAR_LABEL_STYLE_NAME); InitializeDropdownBoxLabelsIfNeeded(); _selectedSettingsIdxFromDropdownBox = EditorGUILayout.Popup(_selectedSettingsIdxFromDropdownBox, _settingDropdownBoxLabels, BuildReportTool.Window.Settings.FILE_FILTER_POPUP_STYLE_NAME); GUILayout.Space(15); GUILayout.Label("Note: Project was built in " + _buildTargetOfReport + " target", BuildReportTool.Window.Settings.TOP_BAR_LABEL_STYLE_NAME); GUILayout.FlexibleSpace(); _settingsShown = UnityBuildSettingsUtility.GetSettingsCategoryFromIdx(_selectedSettingsIdxFromDropdownBox); GUILayout.EndHorizontal(); // ---------------------------------------------------------- _scrollPos = GUILayout.BeginScrollView(_scrollPos); GUILayout.BeginHorizontal(); GUILayout.Space(10); GUILayout.BeginVertical(); GUILayout.Space(10); // ================================================================= DrawProjectSettings(buildReportToDisplay, settings); GUILayout.Space(SETTINGS_GROUP_SPACING); // ================================================================= DrawPathSettings(buildReportToDisplay, settings); GUILayout.Space(SETTINGS_GROUP_SPACING); // ================================================================= DrawBuildSettings(buildReportToDisplay, settings); GUILayout.Space(SETTINGS_GROUP_SPACING); // ================================================================= DrawRuntimeSettings(buildReportToDisplay, settings); // -------------------------------------------------- // security settings if (IsShowingMacSettings) { DrawSetting("Use App Store validation:", settings.MacUseAppStoreValidation); } else if (IsShowingAndroidSettings) { DrawSetting("Use license verification:", settings.AndroidUseLicenseVerification); } GUILayout.Space(SETTINGS_GROUP_SPACING); // ================================================================= DrawDebugSettings(buildReportToDisplay, settings); GUILayout.Space(SETTINGS_GROUP_SPACING); // ================================================================= DrawCodeSettings(buildReportToDisplay, settings); GUILayout.Space(SETTINGS_GROUP_SPACING); // ================================================================= DrawGraphicsSettings(buildReportToDisplay, settings); GUILayout.Space(SETTINGS_GROUP_SPACING); GUILayout.Space(10); GUILayout.EndVertical(); GUILayout.EndHorizontal(); GUILayout.EndScrollView(); requestRepaint = false; }
/// <summary> /// Adds the specified asset as a dependency of the asset being loaded. /// </summary> /// <param name="dependency">The asset path of the dependency.</param> public void AddAssetDependency(String dependency) { Contract.RequireNotEmpty(dependency, nameof(dependency)); AssetDependencies.Add(dependency); }