Beispiel #1
0
        public static (SemanticModel SemanticModel, AssemblyCallGraph CallGraph) Run(string resourceFileName, Platform platform)
        {
            string source = GetEmbeddedResource(resourceFileName);

            var tree = CSharpSyntaxTree.ParseText(source, new CSharpParseOptions(LanguageVersion.CSharp7_3));
            CSharpCompilation compilation = CreateCSharpCompilation(tree, platform);

            var tempFileName = Path.GetTempFileName();

            try
            {
                CreateAssembly(compilation, tempFileName);

                using (var etwCollector = new EtwCollector(true))
                {
                    var targetPlatform = platform == Platform.X64 ? TargetPlatform.X64 : TargetPlatform.X86;
                    JitHostController jitController = new JitHostController(tempFileName, new JitTarget(targetPlatform, TargetRuntime.NetFramework, null), new TargetScope(ScopeType.Project), null, new TestJitPathResolver());

                    jitController.StartProcess();
                    jitController.Process.OutputDataReceived += JitHostOutputDataReceived;
                    jitController.Process.ErrorDataReceived  += JitHostOutputDataReceived;
                    jitController.Process.BeginOutputReadLine();

                    etwCollector.StartEventTrace(jitController.Process.Id);
                    jitController.RunJitCompilation();
                    etwCollector.StopEventTrace();

                    jitController.Process.OutputDataReceived -= JitHostOutputDataReceived;
                    jitController.Process.ErrorDataReceived  -= JitHostOutputDataReceived;

                    CallGraphPostProcessor.Process(etwCollector.AssemblyCallGraph);
                    return(compilation.GetSemanticModel(tree), etwCollector.AssemblyCallGraph);
                }
            }
            finally
            {
                if (File.Exists(tempFileName))
                {
                    File.Delete(tempFileName);
                }
            }
        }
Beispiel #2
0
        private AssemblyCallGraph RunJitCompiler(JitHostController jitController)
        {
            using (var etwCollector = new EtwCollector(_recordEventDetails))
            {
                jitController.StartProcess();
                jitController.Process.OutputDataReceived += JitHostOutputDataReceived;
                jitController.Process.ErrorDataReceived  += JitHostOutputDataReceived;
                jitController.Process.BeginOutputReadLine();
                jitController.Process.BeginErrorReadLine();

                etwCollector.StartEventTrace(jitController.Process.Id);
                jitController.RunJitCompilation();
                etwCollector.StopEventTrace();

                jitController.Process.OutputDataReceived -= JitHostOutputDataReceived;
                jitController.Process.ErrorDataReceived  -= JitHostOutputDataReceived;

                CallGraphPostProcessor.Process(etwCollector.AssemblyCallGraph);
                return(etwCollector.AssemblyCallGraph);
            }
        }