public static SettingsProvider CreatePerformanceTestsProvider() { var provider = new SettingsProvider("Project/Performance Tests", SettingsScope.Project) { // By default the last token of the path is used as display name if no label is provided. label = "Performance Tests", // Create the SettingsProvider and initialize its drawing (IMGUI) function in place: guiHandler = (searchContext) => { var settings = PerformanceTestSettings.GetSerializedSettings(); EditorGUI.BeginChangeCheck(); ShowObjectField(settings.FindProperty("testDescriptionAsset"), typeof(TestSceneAsset), new GUIContent("Test Description Asset")); ShowObjectField(settings.FindProperty("staticAnalysisAsset"), typeof(EditorShaderStaticAnalysisAsset), new GUIContent("Static Analysis Asset")); if (EditorGUI.EndChangeCheck()) { settings.ApplyModifiedProperties(); } }, // Populate the search keywords to enable smart search filtering and label highlighting: keywords = new HashSet <string>(new[] { "Performance" }) }; return(provider); }
public static IEnumerable <StaticAnalysisEntry> GetStaticAnalysisEntries(BuildTarget buildTarget) { var resource = PerformanceTestSettings.GetStaticAnalysisAsset() as EditorShaderStaticAnalysisAsset; if (resource == null) { yield break; } foreach (var definition in resource.processAssetDefinitions) { // Skip when not included in this build target if (definition.includeInTargets != null && Array.IndexOf(definition.includeInTargets, buildTarget) == -1) { continue; } if (definition.asset == null || definition.asset.Equals(null)) { yield return(new StaticAnalysisEntry("Missing asset in definition.")); continue; } var assetType = definition.asset.GetType(); if (assetType != typeof(Material) && assetType != typeof(Shader) && assetType != typeof(ComputeShader)) { yield return(new StaticAnalysisEntry($"Invalid asset type {assetType}")); continue; } if (!definition.filter.Resolve(resource.filters, out var filter, out var errorMessage)) { yield return(new StaticAnalysisEntry($"Invalid filter ({errorMessage})")); continue; } var programFilter = ShaderProgramFilter.Parse(filter.passNameFilter, filter.keywordFilter); yield return(new StaticAnalysisEntry(definition.asset, definition.assetAlias, definition.assetCategory, programFilter, filter.name, filter.category, definition.testName, buildTarget, resource.staticAnalysisTimeout)); } }
public override void OnInspectorGUI() { if (PerformanceTestSettings.GetTestSceneDescriptionAsset() == null) { EditorGUILayout.HelpBox($"Test Scene Asset is null, please set it in Project Settings / Performance Tests", MessageType.Error); } EditorGUIUtility.labelWidth = 100; DrawTestBlock(m_CounterSceneList, m_CounterSRPAssets, Styles.countersText); DrawTestBlock(m_MemorySceneList, m_MemorySRPAssets, Styles.memoryText); DrawTestBlock(m_BuildSceneList, m_BuildSRPAssets, Styles.buildTimeText); EditorGUILayout.Space(); if (GUILayout.Button(Styles.refreshTestRunner)) { CompilationPipeline.RequestScriptCompilation(); } EditorGUILayout.Space(); DrawSRPAssetAliasList(); }