-
Notifications
You must be signed in to change notification settings - Fork 6
Expand file tree
/
Copy pathBuildSizeViewer.cs
More file actions
145 lines (135 loc) · 5.85 KB
/
Copy pathBuildSizeViewer.cs
File metadata and controls
145 lines (135 loc) · 5.85 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
/**
* VRC Build Size Viewer
* Created by MunifiSense
* https://github.com/MunifiSense/VRChat-Build-Size-Viewer
*/
#if UNITY_EDITOR
using System.Collections;
using System.Collections.Generic;
using UnityEditor;
using UnityEngine;
using System.IO;
public class BuildSizeViewer : EditorWindow {
public class BuildObject {
public string size;
public string percent;
public string path;
}
List<BuildObject> buildObjectList;
List<string> uncompressedList;
string buildLogPath = System.Environment.GetFolderPath(System.Environment.SpecialFolder.LocalApplicationData) + "/Unity/Editor/Editor.log";
private char[] delimiterChars = { ' ', '\t' };
float win;
float w1;
float w2;
float w3;
string totalSize;
bool buildLogFound = false;
Vector2 scrollPos;
[MenuItem("Window/Muni/VRC Build Size Viewer")]
public static void ShowWindow() {
EditorWindow.GetWindow(typeof(BuildSizeViewer));
}
void OnGUI() {
win = (float)(position.width * 0.6);
float w1 = (float)(win * 0.15);
float w2 = (float)(win * 0.15);
float w3 = (float)(win * 0.35);
EditorGUILayout.LabelField("VRC Build Size Viewer", EditorStyles.boldLabel);
EditorGUILayout.LabelField("Create a build of your world/avatar and click the button!", EditorStyles.label);
if (GUILayout.Button("Read Build Log")) {
buildLogFound = false;
buildLogFound = getBuildSize();
}
if (buildLogFound) {
if (uncompressedList != null && uncompressedList.Count != 0) {
EditorGUILayout.LabelField("Total Compressed Build Size: " + totalSize);
EditorGUILayout.BeginHorizontal();
EditorGUILayout.Separator();
EditorGUILayout.EndHorizontal();
//EditorGUILayout.LabelField("Uncompressed Build Size by Category: ");
foreach (string s in uncompressedList) {
EditorGUILayout.LabelField(s);
}
}
if (buildObjectList != null && buildObjectList.Count != 0) {
scrollPos = EditorGUILayout.BeginScrollView(scrollPos);
EditorGUILayout.BeginHorizontal();
EditorGUILayout.Separator();
EditorGUILayout.EndHorizontal();
EditorGUILayout.BeginHorizontal();
EditorGUILayout.LabelField("Size%", GUILayout.Width(w1));
EditorGUILayout.LabelField("Size", GUILayout.Width(w2));
EditorGUILayout.LabelField("Path", GUILayout.Width(w3));
EditorGUILayout.EndHorizontal();
EditorGUILayout.BeginHorizontal();
EditorGUILayout.Separator();
EditorGUILayout.EndHorizontal();
foreach (BuildObject buildObject in buildObjectList) {
EditorGUILayout.BeginHorizontal();
EditorGUILayout.LabelField(buildObject.percent, GUILayout.Width(w1));
EditorGUILayout.LabelField(buildObject.size, GUILayout.Width(w2));
EditorGUILayout.LabelField(buildObject.path);
if(buildObject.path != "Resources/unity_builtin_extra") {
if (GUILayout.Button("Go", GUILayout.Width(w1))) {
UnityEngine.Object obj = AssetDatabase.LoadAssetAtPath(buildObject.path, typeof(UnityEngine.Object));
Selection.activeObject = obj;
EditorGUIUtility.PingObject(obj);
}
}
EditorGUILayout.EndHorizontal();
}
EditorGUILayout.EndScrollView();
}
}
}
private bool getBuildSize() {
//Read the text from log
FileUtil.ReplaceFile(buildLogPath, buildLogPath + "copy");
StreamReader reader = new StreamReader(buildLogPath + "copy");
if(reader == null) {
Debug.LogWarning("Could not read build file.");
FileUtil.DeleteFileOrDirectory(buildLogPath + "copy");
return false;
}
string line = reader.ReadLine();
while(line != null) {
if ((line.Contains("scene-") && line.Contains(".vrcw"))
|| (line.Contains("avtr") && line.Contains(".prefab.unity3d"))) {
//Debug.Log("Build found!");
buildObjectList = new List<BuildObject>();
uncompressedList = new List<string>();
line = reader.ReadLine();
//Debug.Log(line);
while (!line.Contains("Compressed Size"))
{
line = reader.ReadLine();
}
totalSize = line.Split(':')[1];
line = reader.ReadLine();
while (line != "Used Assets and files from the Resources folder, sorted by uncompressed size:") {
uncompressedList.Add(line);
line = reader.ReadLine();
}
line = reader.ReadLine();
while (line != "-------------------------------------------------------------------------------") {
string[] splitLine = line.Split(delimiterChars);
BuildObject temp = new BuildObject();
temp.size = splitLine[1]+splitLine[2];
temp.percent = splitLine[4];
temp.path = splitLine[5];
for (int i=6; i<splitLine.Length; i++) {
temp.path += (" " + splitLine[i]);
}
buildObjectList.Add(temp);
line = reader.ReadLine();
}
}
line = reader.ReadLine();
}
FileUtil.DeleteFileOrDirectory(buildLogPath + "copy");
reader.Close();
return true;
}
}
#endif