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);
                }
            }
        }
예제 #2
0
        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);
     }
 }