public static void StaticAnalysisExecute(StaticAnalysisEntry entry) { var buildReportJob = (AsyncBuildReportJob)EditorShaderTools.GenerateBuildReportAsyncGeneric(ShaderAnalysisReport.New(entry.asset, entry.buildTarget, entry.filter)); buildReportJob.throwOnError = true; var time = Time.realtimeSinceStartup; var startTime = time; while (!buildReportJob.IsComplete()) { if (Time.realtimeSinceStartup - time > 3) { Debug.Log($"[Build Report] {entry.asset} {buildReportJob.progress:P} {buildReportJob.message}"); time = Time.realtimeSinceStartup; } if (Time.realtimeSinceStartup - startTime > entry.timeout) { buildReportJob.Cancel(); throw new Exception($"Timeout {entry.timeout} s"); } try { if (buildReportJob.Tick()) { buildReportJob.SetProgress(1, "Completed"); } EditorUpdateManager.Tick(); } catch (Exception e) { buildReportJob.Cancel(); Debug.LogException(e); Assert.Fail(e.Message); } } var report = buildReportJob.builtReport; // Evaluate the number of metrics to send // We fail if we exceed the allowed number of metrics per test var numberOfMetrics = 0; foreach (var program in report.programs) { numberOfMetrics += k_MesureCount * program.performanceUnits.Count(); } Assert.LessOrEqual(numberOfMetrics, k_MaxMeasurePerTest, $"We are trying to send {numberOfMetrics} metrics while the capacity is {k_MaxMeasurePerTest}." + $"Please reduce the number of variants to evaluate for this test."); foreach (var program in report.programs) { foreach (var performanceUnit in program.performanceUnits) { SendMeasure(performanceUnit); } } }
void OnGUI_BuildReportToolbar(List <GUIAction> actions, Func <IAsyncJob> buildReportJob, Object asset, PlatformJob capability) { if (m_AssetMetadata == null) { return; } var assetGUID = ShaderAnalysisUtils.CalculateGUIDFor(asset); var report = m_AssetMetadata.GetReport(assetGUID); GUILayout.BeginHorizontal(EditorStyles.toolbar); { EditorGUILayout.LabelField("Reporting", EditorStyles.whiteLargeLabel, GUILayout.Width(75)); GUI.enabled = EditorShaderTools.DoesPlatformSupport(m_CurrentPlatform, capability); if (GUILayout.Button(EditorGUIUtility.TrIconContent("PlayButton On", "Build Report"), EditorStyles.toolbarButton, GUILayout.Width(k_IconSize))) { actions.Add(new GUIAction(GUIActionKind.BuildReportJob, buildReportJob, asset)); } m_BuildReportFeature = (BuildReportFeature)EditorGUILayout.EnumFlagsField(m_BuildReportFeature, GUILayout.Width(80)); GUILayout.Space(k_HorizontalSpacing); var genDir = ShaderAnalysisUtils.GetTemporaryDirectory(asset, m_CurrentPlatform); GUI.enabled = genDir.Exists; if (GUILayout.Button(EditorGUIUtility.TrIconContent("Project", "Open Temp Dir"), EditorStyles.toolbarButton, GUILayout.Width(k_IconSize))) { Application.OpenURL(genDir.FullName); } GUILayout.Space(k_HorizontalSpacing); GUI.enabled = report != null && ExporterUtilities.IsValid(m_ReportExporterIndex); if (GUILayout.Button(EditorGUIUtility.TrIconContent("SceneLoadOut", "Export to"), EditorStyles.toolbarButton, GUILayout.Width(k_IconSize))) { actions.Add(new GUIAction(GUIActionKind.ExportReport, asset)); } GUI.enabled = true; m_ReportExporterIndex = (ReportExporterIndex)EditorGUILayout.Popup((int)m_ReportExporterIndex, ExporterUtilities.ReportExporterNames, GUILayout.Width(k_ExporterSize)); } GUILayout.EndHorizontal(); GUI.enabled = true; }
IAsyncJob BuildMaterialReport() { m_ShaderFilter = ShaderProgramFilter.Parse(m_ShaderPassFilter, m_KeywordFilter); return(EditorShaderTools.GenerateBuildReportAsync(ShaderAnalysis.ShaderAnalysisReport.New(m_Material, m_CurrentPlatform, m_ShaderFilter, m_BuildReportFeature, m_LogCompilerArguments))); }