Esempio n. 1
0
        void ParsePlayerLog(string logFilename)
        {
            if (string.IsNullOrEmpty(logFilename))
            {
                return;
            }

            var variants = GetIssues().Where(i => i.category == IssueCategory.ShaderVariants).ToArray();

            if (m_ShadersAuditor.ParsePlayerLog(logFilename, variants, new ProgressBarDisplay()))
            {
                EditorUtility.DisplayDialog("Shader Variants", k_PlayerLogProcessed, "Ok");
                Refresh();
            }
            else if (GraphicsSettingsHelper.logShaderCompilationSupported)
            {
                if (GraphicsSettingsHelper.logWhenShaderIsCompiled)
                {
                    EditorUtility.DisplayDialog("Shader Variants", k_NoCompiledVariantWarning, "Ok");
                }
                else
                {
                    GraphicsSettingsHelper.logWhenShaderIsCompiled = EditorUtility.DisplayDialog("Shader Variants", k_NoCompiledVariantWarningLogDisabled, "Yes", "No");
                }
            }
        }
        public void UnusedVariantsAreReported()
        {
            EditorSceneManager.SaveScene(SceneManager.GetActiveScene(), "Assets/UntitledScene.unity");

            var buildPath = FileUtil.GetUniqueTempPathInProject();

            Directory.CreateDirectory(buildPath);

            ShadersAuditor.ClearBuildData(); // clear previously built variants, if any
            var buildReport = BuildPipeline.BuildPlayer(new BuildPlayerOptions
            {
                scenes           = new string[] {},
                locationPathName = Path.Combine(buildPath, "test"),
                target           = EditorUserBuildSettings.activeBuildTarget,
                targetGroup      = BuildPipeline.GetBuildTargetGroup(EditorUserBuildSettings.activeBuildTarget),
                options          = BuildOptions.Development
            });

            Assert.True(buildReport.summary.result == BuildResult.Succeeded);

            Directory.Delete(buildPath, true);

            AssetDatabase.DeleteAsset("Assets/UntitledScene.unity");

            var allVariants = Utility.Analyze(IssueCategory.ShaderVariants);

            ShadersAuditor.ClearBuildData(); // cleanup

            var variants = allVariants.Where(i => i.description.Equals(k_ShaderName) && i.category == IssueCategory.ShaderVariants).ToArray();

            Assert.Positive(variants.Length);

            var result = ShadersAuditor.ParsePlayerLog(m_PlayerLogResource.relativePath, variants);

            Assert.That(result, Is.EqualTo(ParseLogResult.Success), "No compiled shader variants found in player log.");

            var shaderCompilerPlatforms    = variants.Select(v => v.GetCustomProperty(ShaderVariantProperty.Platform)).Distinct().ToArray();
            var numShaderCompilerPlatforms = shaderCompilerPlatforms.Count();

            Assert.AreEqual(5 * numShaderCompilerPlatforms, variants.Length, "Compiler Platforms: " + string.Join(", ", shaderCompilerPlatforms));

            var unusedVariants = variants.Where(i => !i.GetCustomPropertyAsBool(ShaderVariantProperty.Compiled)).ToArray();

            foreach (var plat in shaderCompilerPlatforms)
            {
                var unusedVariantsForPlatform = unusedVariants.Where(v => v.GetCustomProperty(ShaderVariantProperty.Platform).Equals(plat)).ToArray();

                Assert.AreEqual(2, unusedVariantsForPlatform.Length);
                Assert.True(unusedVariantsForPlatform[0].GetCustomProperty(ShaderVariantProperty.PassName).Equals("MyTestShader/Pass"));
                Assert.True(unusedVariantsForPlatform[0].GetCustomProperty(ShaderVariantProperty.Keywords).Equals("KEYWORD_B"));
#if UNITY_2019_1_OR_NEWER
                Assert.True(unusedVariantsForPlatform[1].GetCustomProperty(ShaderVariantProperty.PassName).Equals("Pass 1"));
#else
                Assert.True(unusedVariantsForPlatform[1].GetCustomProperty(ShaderVariantProperty.PassName).Equals(string.Empty));
#endif
                Assert.True(unusedVariantsForPlatform[1].GetCustomProperty(ShaderVariantProperty.Keywords).Equals(ShadersAuditor.k_NoKeywords));
            }
        }
Esempio n. 3
0
        void ParsePlayerLog(string logFilename)
        {
            if (string.IsNullOrEmpty(logFilename))
            {
                return;
            }

            const string dialogTitle = "Shader Variants";
            var          variants    = GetIssues().Where(i => i.category == IssueCategory.ShaderVariants).ToArray();
            var          result      = ShadersAuditor.ParsePlayerLog(logFilename, variants, new ProgressBarDisplay());

            switch (result)
            {
            case ParseLogResult.Success:
                EditorUtility.DisplayDialog(dialogTitle, k_PlayerLogProcessed, "Ok");
                Refresh();
                break;

            case ParseLogResult.NoCompiledVariants:
                if (GraphicsSettingsProxy.logShaderCompilationSupported)
                {
                    if (GraphicsSettingsProxy.logWhenShaderIsCompiled)
                    {
                        EditorUtility.DisplayDialog(dialogTitle, k_NoCompiledVariantWarning, "Ok");
                    }
                    else
                    {
                        GraphicsSettingsProxy.logWhenShaderIsCompiled = EditorUtility.DisplayDialog(dialogTitle, k_NoCompiledVariantWarningLogDisabled, "Yes", "No");
                    }
                }
                break;

            case ParseLogResult.ReadError:
                EditorUtility.DisplayDialog(dialogTitle, k_PlayerLogReadError, "Ok");
                break;
            }
        }
        public void PlayerLogDoesNotContainShaderCompilationLog()
        {
            var result = ShadersAuditor.ParsePlayerLog(m_PlayerLogWithNoCompilationResource.relativePath, new ProjectIssue[0]);

            Assert.That(result, Is.EqualTo(ParseLogResult.NoCompiledVariants));
        }