Пример #1
0
        private static void ConvertToSpeedscope(string fileToConvert)
        {
            var symbolReader = new SymbolReader(System.IO.TextWriter.Null)
            {
                SymbolPath = SymbolPath.MicrosoftSymbolServerPath
            };
            var etlxFilePath = TraceLog.CreateFromEventPipeDataFile(fileToConvert);

            var eventLog = new TraceLog(etlxFilePath);

            try
            {
                var stackSource = new MutableTraceEventStackSource(eventLog)
                {
                    OnlyManagedCodeStacks = true // EventPipe currently only has managed code stacks.
                };

                var computer = new SampleProfilerThreadTimeComputer(eventLog, symbolReader);
                computer.GenerateThreadTimeStacks(stackSource);

                var speedScopeFilePath = Path.ChangeExtension(fileToConvert, "speedscope.json");

                SpeedScopeStackSourceWriter.WriteStackViewAsJson(stackSource, speedScopeFilePath);
            }
            finally
            {
                eventLog.Dispose();

                if (File.Exists(etlxFilePath))
                {
                    File.Delete(etlxFilePath);
                }
            }
        }
Пример #2
0
        public async Task <int> OnExecuteAsync(IConsole console, CommandLineApplication app)
        {
            var cleanupFiles = new List <string>();

            MemoryDump dump  = null;
            TraceLog   trace = null;

            if (Files == null || Files.Count == 0)
            {
                console.Error.WriteLine("No files were provided!");
                return(1);
            }

            try
            {
                foreach (var file in Files)
                {
                    if (file.EndsWith(".netperf"))
                    {
                        console.WriteLine($"Loading trace: {file} ...");
                        var etlx = TraceLog.CreateFromEventPipeDataFile(file);
                        console.WriteLine($"Convert trace to: {etlx}.");
                        cleanupFiles.Add(etlx);
                        trace = TraceLog.OpenOrConvert(etlx);
                    }
                    else
                    {
                        console.WriteLine($"Loading crash dump: {file} ...");
                        var target = DataTarget.LoadCrashDump(file);
                        // Assume there's only one
                        if (target.ClrVersions.Count > 1)
                        {
                            console.Error.WriteLine("Multiple CLR versions are present!");
                            return(1);
                        }

                        var runtime = target.ClrVersions[0].CreateRuntime();
                        dump = new MemoryDump(target, runtime);
                    }
                }

                if (dump == null && trace == null)
                {
                    console.Error.WriteLine("A dump or trace could not be loaded from the provided files");
                    return(1);
                }
                var session = new AnalysisSession(dump, trace);
                await(new CommandProcessor()).RunAsync(console, session, console.GetCtrlCToken());
                return(0);
            }
            finally
            {
                dump?.Dispose();
                trace?.Dispose();

                foreach (var file in cleanupFiles)
                {
                    if (File.Exists(file))
                    {
                        File.Delete(file);
                    }
                }
            }
        }
Пример #3
0
 public void Dispose()
 {
     myLog?.Dispose();
 }