ReporterSummaryViewer.cs 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178
  1. #if UNITY_2019_4_OR_NEWER
  2. using System.IO;
  3. using System.Linq;
  4. using System.Collections.Generic;
  5. using UnityEditor;
  6. using UnityEngine;
  7. using UnityEditor.UIElements;
  8. using UnityEngine.UIElements;
  9. namespace YooAsset.Editor
  10. {
  11. internal class ReporterSummaryViewer
  12. {
  13. private class ItemWrapper
  14. {
  15. public string Title { private set; get; }
  16. public string Value { private set; get; }
  17. public ItemWrapper(string title, string value)
  18. {
  19. Title = title;
  20. Value = value;
  21. }
  22. }
  23. private VisualTreeAsset _visualAsset;
  24. private TemplateContainer _root;
  25. private ListView _listView;
  26. private readonly List<ItemWrapper> _items = new List<ItemWrapper>();
  27. /// <summary>
  28. /// 初始化页面
  29. /// </summary>
  30. public void InitViewer()
  31. {
  32. // 加载布局文件
  33. _visualAsset = UxmlLoader.LoadWindowUXML<ReporterSummaryViewer>();
  34. if (_visualAsset == null)
  35. return;
  36. _root = _visualAsset.CloneTree();
  37. _root.style.flexGrow = 1f;
  38. // 概述列表
  39. _listView = _root.Q<ListView>("ListView");
  40. _listView.makeItem = MakeListViewItem;
  41. _listView.bindItem = BindListViewItem;
  42. }
  43. /// <summary>
  44. /// 填充页面数据
  45. /// </summary>
  46. public void FillViewData(BuildReport buildReport)
  47. {
  48. _items.Clear();
  49. _items.Add(new ItemWrapper("YooAsset版本", buildReport.Summary.YooVersion));
  50. _items.Add(new ItemWrapper("引擎版本", buildReport.Summary.UnityVersion));
  51. _items.Add(new ItemWrapper("构建时间", buildReport.Summary.BuildDate));
  52. _items.Add(new ItemWrapper("构建耗时", ConvertTime(buildReport.Summary.BuildSeconds)));
  53. _items.Add(new ItemWrapper("构建平台", $"{buildReport.Summary.BuildTarget}"));
  54. _items.Add(new ItemWrapper("构建管线", $"{buildReport.Summary.BuildPipeline}"));
  55. _items.Add(new ItemWrapper("构建模式", $"{buildReport.Summary.BuildMode}"));
  56. _items.Add(new ItemWrapper("包裹名称", buildReport.Summary.BuildPackageName));
  57. _items.Add(new ItemWrapper("包裹版本", buildReport.Summary.BuildPackageVersion));
  58. _items.Add(new ItemWrapper(string.Empty, string.Empty));
  59. _items.Add(new ItemWrapper("启用可寻址资源定位", $"{buildReport.Summary.EnableAddressable}"));
  60. _items.Add(new ItemWrapper("资源定位地址大小写不敏感", $"{buildReport.Summary.LocationToLower}"));
  61. _items.Add(new ItemWrapper("包含资源GUID数据", $"{buildReport.Summary.IncludeAssetGUID}"));
  62. _items.Add(new ItemWrapper("资源包名唯一化", $"{buildReport.Summary.UniqueBundleName}"));
  63. _items.Add(new ItemWrapper("共享资源打包规则", buildReport.Summary.SharedPackRuleClassName));
  64. _items.Add(new ItemWrapper("资源加密服务类", buildReport.Summary.EncryptionServicesClassName));
  65. _items.Add(new ItemWrapper(string.Empty, string.Empty));
  66. _items.Add(new ItemWrapper("构建参数", string.Empty));
  67. _items.Add(new ItemWrapper("OutputNameStyle", $"{buildReport.Summary.OutputNameStyle}"));
  68. _items.Add(new ItemWrapper("CompressOption", $"{buildReport.Summary.CompressOption}"));
  69. _items.Add(new ItemWrapper("DisableWriteTypeTree", $"{buildReport.Summary.DisableWriteTypeTree}"));
  70. _items.Add(new ItemWrapper("IgnoreTypeTreeChanges", $"{buildReport.Summary.IgnoreTypeTreeChanges}"));
  71. _items.Add(new ItemWrapper(string.Empty, string.Empty));
  72. _items.Add(new ItemWrapper("构建结果", string.Empty));
  73. _items.Add(new ItemWrapper("构建文件总数", $"{buildReport.Summary.AssetFileTotalCount}"));
  74. _items.Add(new ItemWrapper("主资源总数", $"{buildReport.Summary.MainAssetTotalCount}"));
  75. _items.Add(new ItemWrapper("资源包总数", $"{buildReport.Summary.AllBundleTotalCount}"));
  76. _items.Add(new ItemWrapper("资源包总大小", ConvertSize(buildReport.Summary.AllBundleTotalSize)));
  77. _items.Add(new ItemWrapper("加密资源包总数", $"{buildReport.Summary.EncryptedBundleTotalCount}"));
  78. _items.Add(new ItemWrapper("加密资源包总大小", ConvertSize(buildReport.Summary.EncryptedBundleTotalSize)));
  79. _items.Add(new ItemWrapper("原生资源包总数", $"{buildReport.Summary.RawBundleTotalCount}"));
  80. _items.Add(new ItemWrapper("原生资源包总大小", ConvertSize(buildReport.Summary.RawBundleTotalSize)));
  81. _listView.Clear();
  82. _listView.ClearSelection();
  83. _listView.itemsSource = _items;
  84. _listView.Rebuild();
  85. }
  86. /// <summary>
  87. /// 挂接到父类页面上
  88. /// </summary>
  89. public void AttachParent(VisualElement parent)
  90. {
  91. parent.Add(_root);
  92. }
  93. /// <summary>
  94. /// 从父类页面脱离开
  95. /// </summary>
  96. public void DetachParent()
  97. {
  98. _root.RemoveFromHierarchy();
  99. }
  100. // 列表相关
  101. private VisualElement MakeListViewItem()
  102. {
  103. VisualElement element = new VisualElement();
  104. element.style.flexDirection = FlexDirection.Row;
  105. {
  106. var label = new Label();
  107. label.name = "Label1";
  108. label.style.unityTextAlign = TextAnchor.MiddleLeft;
  109. label.style.marginLeft = 3f;
  110. //label.style.flexGrow = 1f;
  111. label.style.width = 200;
  112. element.Add(label);
  113. }
  114. {
  115. var label = new Label();
  116. label.name = "Label2";
  117. label.style.unityTextAlign = TextAnchor.MiddleLeft;
  118. label.style.marginLeft = 3f;
  119. label.style.flexGrow = 1f;
  120. label.style.width = 150;
  121. element.Add(label);
  122. }
  123. return element;
  124. }
  125. private void BindListViewItem(VisualElement element, int index)
  126. {
  127. var itemWrapper = _items[index];
  128. // Title
  129. var label1 = element.Q<Label>("Label1");
  130. label1.text = itemWrapper.Title;
  131. // Value
  132. var label2 = element.Q<Label>("Label2");
  133. label2.text = itemWrapper.Value;
  134. }
  135. private string ConvertTime(int time)
  136. {
  137. if (time <= 60)
  138. {
  139. return $"{time}秒钟";
  140. }
  141. else
  142. {
  143. int minute = time / 60;
  144. return $"{minute}分钟";
  145. }
  146. }
  147. private string ConvertSize(long size)
  148. {
  149. if (size == 0)
  150. return "0";
  151. return EditorUtility.FormatBytes(size);
  152. }
  153. }
  154. }
  155. #endif