internal static void PopulateUnusedList(AssetBuildReport buildLog, SortedDictionary <SerializableSystemType, bool> validTypeList) { //Count all directories in project for use in progress bar m_NumberOfDirectories = System.IO.Directory.GetDirectories(Application.dataPath, "*.*", System.IO.SearchOption.AllDirectories).Length; int directoriesTraversed = 0; //traverse directories traverseDirectory(-1, Application.dataPath, buildLog.m_BuildSizeList, 0, ref directoriesTraversed, validTypeList); EditorUtility.ClearProgressBar(); }
internal static AssetBuildReport AnalyzeBuildLog() { AssetBuildReport buildReport = new AssetBuildReport(); string UnityEditorLogfile = GetLogFolderPath(); try { // Have to use FileStream to get around sharing violations! FileStream FS = new FileStream(UnityEditorLogfile, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); StreamReader SR = new StreamReader(FS); string line; int linesRead = 0; int lineIndex = 0; while (!SR.EndOfStream) { line = SR.ReadLine(); linesRead++; if ((line).Contains("Mono dependencies included in the build")) { lineIndex = linesRead; } } FS.Position = 0; SR.DiscardBufferedData(); //Start reading from log at the right line for (int i = 0; i < lineIndex - 1; i++) { SR.ReadLine(); } while (!SR.EndOfStream && !(line = SR.ReadLine()).Contains("Mono dependencies included in the build")) { ; } while (!SR.EndOfStream && (line = SR.ReadLine()) != "") { int stringLength = line.Length; int startIndex = line.LastIndexOf(" "); buildReport.AddDependency(line.Substring(startIndex, stringLength - startIndex)); } while (!SR.EndOfStream && !(line = SR.ReadLine()).Contains("Used Assets,")) { ; } bool assetAnalysisComplete = false; while (!SR.EndOfStream && !assetAnalysisComplete) { string curLine = SR.ReadLine(); if (curLine == "" || curLine.Contains("System memory in use before") || !curLine.Contains("% ")) { assetAnalysisComplete = true; } else { if (!curLine.Contains("Built-in")) { string str = curLine.Substring(curLine.IndexOf("% ") + 2); if (str.StartsWith("Assets/")) { EditorUtility.DisplayProgressBar( "Parsing build log", "Parsing build log to retrieve info", (float)SR.BaseStream.Position / (float)SR.BaseStream.Length); UnityEngine.Object obj = UnityEditor.AssetDatabase.LoadAssetAtPath(str, typeof(UnityEngine.Object)); if (obj != null) { BuildReportAsset asset = new BuildReportAsset(); asset.SetAssetInfo(obj, str); //Split on whitespace string[] splitstring = curLine.Split(null); asset.SetSize(float.Parse(splitstring[1]), splitstring[2]); buildReport.AddAsset(asset); } else { Debug.LogWarning(str + " is not a valid asset"); } } } } } } catch (Exception E) { Debug.LogError("Error: " + E); } EditorUtility.ClearProgressBar(); //TODO FIND AND ADD ICONS FOR BUILDTARGETS AND CERTIFICATES AND WHATEVER ELSE return(buildReport); }