Пример #1
0
    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)));
 }