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); } } }
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); } } } }
public void Dispose() { myLog?.Dispose(); }