From 36c3c1da49b8c2423352bc93285455306d070a79 Mon Sep 17 00:00:00 2001 From: MingWai Chan Date: Wed, 4 May 2022 16:06:57 +0200 Subject: [PATCH] fix for 2021.2.19f1 --- .../ShaderVariantTool_BuildProcess.cs | 71 +++++++++++++------ .../ShaderVariantTool_ComputeProcess.cs | 2 +- .../ShaderVariantTool_Helper.cs | 13 +++- .../ShaderVariantTool_ShaderProcess.cs | 2 +- 4 files changed, 65 insertions(+), 23 deletions(-) diff --git a/Assets/Editor/ShaderVariantTool/ShaderVariantTool_BuildProcess.cs b/Assets/Editor/ShaderVariantTool/ShaderVariantTool_BuildProcess.cs index 5687272..ca169a9 100644 --- a/Assets/Editor/ShaderVariantTool/ShaderVariantTool_BuildProcess.cs +++ b/Assets/Editor/ShaderVariantTool/ShaderVariantTool_BuildProcess.cs @@ -53,7 +53,7 @@ public void OnPostprocessBuild(BuildReport report) //Because of the new incremental build changes, Development build won't trigger OnShaderProcess - 1338940 if(SVL.shaderlist.Count == 0) { - Debug.LogError("No shader or variant are logged. Please turn ON Delete PlayerCache Before Build checkbox in Window > ShaderVariantTool."); + Debug.LogError("No shader or variant are logged. Please go to Window > ShaderVariantTool > turn ON Delete PlayerCache Before Build checkbox."); } //Calculate shader count by type @@ -161,6 +161,9 @@ public void OnPostprocessBuild(BuildReport report) //CleanUp outputRows.Clear(); + //Let user know the tool has successfully done it's job + Debug.Log("Build is done and ShaderVariantTool has done gathering data. Find the details on Windows > ShaderVariantTool, or look at the generated CSV reort at: "+ShaderVariantTool.savedFile); + SVL.buildProcessStarted = false; } @@ -219,45 +222,72 @@ private void ReadShaderCompileInfo() string programName = Helper.ExtractString(currentLine, passName+"\" (",""); programName = programName.Replace("\"","").Replace(")",""); - //total variant + //skip the line bla bla bla prepared currentLine = sr.ReadLine(); - string totalVariant = Helper.ExtractString(currentLine, "" , " variants," ); - totalVariant = totalVariant.Replace(" ",""); - int totalVariantInt = int.Parse(totalVariant); + if (currentLine.Contains("prepared") && !currentLine.Contains("variants, prepared")) + { + currentLine = sr.ReadLine(); + } //remaining variant & stripping time - currentLine = sr.ReadLine(); - string strippingTime = Helper.ExtractString(currentLine, "finished in " , " seconds. " ); - string remainingVariant = Helper.ExtractString(currentLine, " seconds. " , " variants left" ); + string remainingVariant = Helper.ExtractString(currentLine, "" , " / " ); int remainingVariantInt = int.Parse(remainingVariant); + //total variant + string totalVariant = Helper.ExtractString(currentLine, "/ " , " variants" ); + totalVariant = totalVariant.Replace(" ",""); + int totalVariantInt = int.Parse(totalVariant); + + //stripping time + string strippingTime = Helper.ExtractString(currentLine, "variants left after stripping, processed in " , " seconds" ); + //jump to line of compilation time if(remainingVariantInt > 0) { currentLine = sr.ReadLine(); - while (!currentLine.Contains("finished in ")) + while (!currentLine.Contains("finished in ") || currentLine.Contains("variants ready")) { currentLine = sr.ReadLine(); } } //compilation time and compiled variant count (time is faster if there are cached variants) + string remainingText = currentLine; + string startString = ""; + string endString = ""; string compileTime = "0.00"; string compiledVariants = "0"; string localCache = "0"; string remoteCache = "0"; if(remainingVariantInt > 0) { - compileTime = Helper.ExtractString(currentLine, "finished in " , " seconds. " ); - compiledVariants = Helper.ExtractString(currentLine, ", compiled " , " variants" ); - localCache = Helper.ExtractString(currentLine, "Local cache hits " , ", remote" ); - remoteCache = Helper.ExtractString(currentLine, "remote cache hits " , ", compiled" ); - - //Changes for the latest PR - localCache = Helper.ExtractString(localCache, "" , "(" ); + //Compile time + startString = "finished in "; + endString = " seconds. "; + compileTime = Helper.ExtractString(remainingText,startString,endString,false); + compileTime = compileTime.Replace(" ",""); + remainingText = Helper.GetRemainingString(remainingText,endString); + + //Local cache hit + startString = "Local cache hits "; + endString = " ("; + localCache = Helper.ExtractString(remainingText,startString,endString,false); localCache = localCache.Replace(" ",""); - remoteCache = Helper.ExtractString(remoteCache, "" , "(" ); + remainingText = Helper.GetRemainingString(remainingText,endString); + + //Remote cache hit + startString = "remote cache hits "; + endString = " ("; + remoteCache = Helper.ExtractString(remainingText,startString,endString,false); remoteCache = remoteCache.Replace(" ",""); + remainingText = Helper.GetRemainingString(remainingText,endString); + + //Compiled variants + startString = "), compiled "; + endString = " variants ("; + compiledVariants = Helper.ExtractString(remainingText,startString,endString,false); + compiledVariants = compiledVariants.Replace(" ",""); + remainingText = Helper.GetRemainingString(remainingText,endString); } int compiledVariantsInt = int.Parse(compiledVariants); int localCacheInt = int.Parse(localCache); @@ -300,12 +330,13 @@ private void ReadShaderCompileInfo() "Tool counted there are "+SVL.variantFromShader+" shader variants in build, "+ "but Editor Log counted "+variantCountinBuild+". Please contact @mingwai on slack."); } - if( SVL.variantInCache + SVL.variantCompiledCount != variantCountinBuild) + int variantCacheAndCompiledSum = SVL.variantInCache + SVL.variantCompiledCount; + if( variantCacheAndCompiledSum != variantCountinBuild) { Debug.LogError("ShaderVariantTool error. "+ "The sum of "+SVL.variantInCache+" variants in cache + "+ - SVL.variantCompiledCount+" variants compiled is not equal to the accumulated sum "+ - variantCountinBuild+" variants. Please contact @mingwai on slack."); + SVL.variantCompiledCount+" variants compiled "+variantCacheAndCompiledSum+" variants is not equal to the accumulated sum "+ + variantCountinBuild+" variants. Please contact @mingwai on slack. This could be related to exisiting known issue: Case 1389276"); } } } diff --git a/Assets/Editor/ShaderVariantTool/ShaderVariantTool_ComputeProcess.cs b/Assets/Editor/ShaderVariantTool/ShaderVariantTool_ComputeProcess.cs index bbc569e..88d26e4 100644 --- a/Assets/Editor/ShaderVariantTool/ShaderVariantTool_ComputeProcess.cs +++ b/Assets/Editor/ShaderVariantTool/ShaderVariantTool_ComputeProcess.cs @@ -67,7 +67,7 @@ public void OnProcessComputeShader(ComputeShader shader, string kernelName, ILis bool isLocal = ShaderKeyword.IsKeywordLocal(sk[k]); LocalKeyword lkey = new LocalKeyword(shader,sk[k].name); - scv.shaderKeywordName = ( isLocal? "[Local] " : "[Global] " ) + sk[k].name; //sk[k].GetKeywordName(); + scv.shaderKeywordName = ( isLocal? "[Local]" : "[Global]" ) + sk[k].name; //sk[k].GetKeywordName(); scv.shaderKeywordType = isLocal? "--" : ShaderKeyword.GetGlobalKeywordType(sk[k]).ToString(); //""+sk[k].GetKeywordType().ToString(); scv.shaderKeywordIndex = sk[k].index.ToString(); scv.isShaderKeywordValid = sk[k].IsValid().ToString(); diff --git a/Assets/Editor/ShaderVariantTool/ShaderVariantTool_Helper.cs b/Assets/Editor/ShaderVariantTool/ShaderVariantTool_Helper.cs index 9163396..4f94b10 100644 --- a/Assets/Editor/ShaderVariantTool/ShaderVariantTool_Helper.cs +++ b/Assets/Editor/ShaderVariantTool/ShaderVariantTool_Helper.cs @@ -29,7 +29,13 @@ public static string TimeFormatString (double timeInSeconds) return timeString; } - public static string ExtractString(string line, string from, string to) + public static string GetRemainingString(string line, string from) + { + int index = line.IndexOf(from) + from.Length; + return line.Substring( index , line.Length - index); + } + + public static string ExtractString(string line, string from, string to, bool takeLastIndexOfTo = true) { int pFrom = 0; if(from != "") @@ -42,6 +48,11 @@ public static string ExtractString(string line, string from, string to) if(to != "") { int index = line.LastIndexOf(to); + if(!takeLastIndexOfTo) + { + index = line.IndexOf(to); + } + if(index >= 0) pTo = index; } diff --git a/Assets/Editor/ShaderVariantTool/ShaderVariantTool_ShaderProcess.cs b/Assets/Editor/ShaderVariantTool/ShaderVariantTool_ShaderProcess.cs index e52a503..d7e2e19 100644 --- a/Assets/Editor/ShaderVariantTool/ShaderVariantTool_ShaderProcess.cs +++ b/Assets/Editor/ShaderVariantTool/ShaderVariantTool_ShaderProcess.cs @@ -68,7 +68,7 @@ public void OnProcessShader(Shader shader, ShaderSnippetData snippet, IList