static IEnumerable <string> IterateTEPLines(bool includeSelf, BuildLog.LogStep node) { ulong us = (ulong)(node.StartTime * 1000); string argText = string.Empty; if (node.Entries.Count > 0) { StringBuilder builder = new StringBuilder(); builder.Append(", \"args\": {"); for (int i = 0; i < node.Entries.Count; i++) { string line = (node.Entries[i].Level == LogLevel.Warning || node.Entries[i].Level == LogLevel.Error) ? $"{node.Entries[i].Level}: {node.Entries[i].Message}" : node.Entries[i].Message; builder.Append($"\"{i}\":\"{CleanJSONText(line)}\""); if (i < (node.Entries.Count - 1)) { builder.Append(", "); } } builder.Append("}"); argText = builder.ToString(); } if (includeSelf) { yield return("{" + $"\"name\": \"{CleanJSONText(node.Name)}\", \"ph\": \"X\", \"dur\": {node.DurationMS * 1000}, \"tid\": {node.ThreadId}, \"ts\": {us}, \"pid\": 1" + argText + "}"); } foreach (var child in node.Children) { foreach (var r in IterateTEPLines(true, child)) { yield return(r); } } }
static IEnumerable <string> IterateTEPLines(bool includeSelf, BuildLog.LogStep node) { ulong us = (ulong)(node.StartTime * 1000); if (includeSelf) { yield return("{" + $"\"name\": \"{CleanJSONText(node.Name)}\", \"ph\": \"X\", \"dur\": {node.DurationMS * 1000}, \"tid\": {node.ThreadId}, \"ts\": {us}, \"pid\": 1" + "}"); } foreach (var msg in node.Entries) { string line = (msg.Level == LogLevel.Warning || msg.Level == LogLevel.Error) ? $"{msg.Level}: {msg.Message}" : msg.Message; ulong us2 = (ulong)(node.StartTime * 1000); yield return("{" + $"\"name\": \"{CleanJSONText(line)}\", \"ph\": \"i\", \"tid\": {msg.ThreadId}, \"ts\": {us2}, \"pid\": 1" + "}"); } foreach (var child in node.Children) { foreach (var r in IterateTEPLines(true, child)) { yield return(r); } } }
static void PrintNodeR(bool includeSelf, StringBuilder builder, int indentCount, BuildLog.LogStep node) { if (includeSelf) { AppendLineIndented(builder, indentCount, $"[{node.Name}] {node.DurationMS * 1000}us"); } foreach (var msg in node.Entries) { string line = (msg.Level == LogLevel.Warning || msg.Level == LogLevel.Error) ? $"{msg.Level}: {msg.Message}" : msg.Message; AppendLineIndented(builder, indentCount + 1, line); } foreach (var child in node.Children) { PrintNodeR(true, builder, indentCount + 1, child); } }