diff --git a/eng/Versions.props b/eng/Versions.props
index e7f330892e..285fecbc3c 100644
--- a/eng/Versions.props
+++ b/eng/Versions.props
@@ -35,7 +35,7 @@
1.1.61812
1.7.0
- 2.0.44
+ 2.0.51
3.1.2
3.1.2
3.1.2
diff --git a/src/Tools/dotnet-trace/TraceFileFormatConverter.cs b/src/Tools/dotnet-trace/TraceFileFormatConverter.cs
index 6b4d13451a..58017d5622 100644
--- a/src/Tools/dotnet-trace/TraceFileFormatConverter.cs
+++ b/src/Tools/dotnet-trace/TraceFileFormatConverter.cs
@@ -13,13 +13,14 @@
namespace Microsoft.Diagnostics.Tools.Trace
{
- internal enum TraceFileFormat { NetTrace, Speedscope };
+ internal enum TraceFileFormat { NetTrace, Speedscope, Chromium };
internal static class TraceFileFormatConverter
{
- private static Dictionary TraceFileFormatExtensions = new Dictionary() {
+ private static IReadOnlyDictionary TraceFileFormatExtensions = new Dictionary() {
{ TraceFileFormat.NetTrace, "nettrace" },
- { TraceFileFormat.Speedscope, "speedscope.json" }
+ { TraceFileFormat.Speedscope, "speedscope.json" },
+ { TraceFileFormat.Chromium, "chromium.json" }
};
public static void ConvertToFormat(TraceFileFormat format, string fileToConvert, string outputFilename = "")
@@ -35,9 +36,10 @@ public static void ConvertToFormat(TraceFileFormat format, string fileToConvert,
case TraceFileFormat.NetTrace:
break;
case TraceFileFormat.Speedscope:
+ case TraceFileFormat.Chromium:
try
{
- ConvertToSpeedscope(fileToConvert, outputFilename);
+ Convert(format, fileToConvert, outputFilename);
}
// TODO: On a broken/truncated trace, the exception we get from TraceEvent is a plain System.Exception type because it gets caught and rethrown inside TraceEvent.
// We should probably modify TraceEvent to throw a better exception.
@@ -46,7 +48,7 @@ public static void ConvertToFormat(TraceFileFormat format, string fileToConvert,
if (ex.ToString().Contains("Read past end of stream."))
{
Console.WriteLine("Detected a potentially broken trace. Continuing with best-efforts to convert the trace, but resulting speedscope file may contain broken stacks as a result.");
- ConvertToSpeedscope(fileToConvert, outputFilename, true);
+ Convert(format, fileToConvert, outputFilename, true);
}
else
{
@@ -61,10 +63,10 @@ public static void ConvertToFormat(TraceFileFormat format, string fileToConvert,
Console.Out.WriteLine("Conversion complete");
}
- private static void ConvertToSpeedscope(string fileToConvert, string outputFilename, bool continueOnError=false)
+ private static void Convert(TraceFileFormat format, string fileToConvert, string outputFilename, bool continueOnError=false)
{
var etlxFilePath = TraceLog.CreateFromEventPipeDataFile(fileToConvert, null, new TraceLogOptions() { ContinueOnError = continueOnError } );
- using (var symbolReader = new SymbolReader(System.IO.TextWriter.Null) { SymbolPath = SymbolPath.MicrosoftSymbolServerPath })
+ using (var symbolReader = new SymbolReader(TextWriter.Null) { SymbolPath = SymbolPath.MicrosoftSymbolServerPath })
using (var eventLog = new TraceLog(etlxFilePath))
{
var stackSource = new MutableTraceEventStackSource(eventLog)
@@ -78,14 +80,24 @@ private static void ConvertToSpeedscope(string fileToConvert, string outputFilen
};
computer.GenerateThreadTimeStacks(stackSource);
- SpeedScopeStackSourceWriter.WriteStackViewAsJson(stackSource, outputFilename);
+ switch (format)
+ {
+ case TraceFileFormat.Speedscope:
+ SpeedScopeStackSourceWriter.WriteStackViewAsJson(stackSource, outputFilename);
+ break;
+ case TraceFileFormat.Chromium:
+ ChromiumStackSourceWriter.WriteStackViewAsJson(stackSource, outputFilename, compress: false);
+ break;
+ default:
+ // we should never get here
+ throw new ArgumentException($"Invalid TraceFileFormat \"{format}\"");
+ }
}
if (File.Exists(etlxFilePath))
{
File.Delete(etlxFilePath);
}
-
}
}
}