private static void EndBuildStepInternal(BuildLog log) { Debug.Assert(log.m_Stack.Count > 1); LogStep node = log.m_Stack.Pop(); node.Complete(log.GetWallTime()); if (node.isThreaded) { foreach (BuildLog subLog in log.m_ThreadedLogs.Values) { if (subLog != log) { OffsetTimesR(subLog.Root, node.StartTime); if (subLog.Root.HasChildren) { node.Children.AddRange(subLog.Root.Children); } if (subLog.Root.HasEntries) { node.Entries.AddRange(subLog.Root.Entries); } } } log.m_ThreadedLogs.Dispose(); log.m_ThreadedLogs = null; } }
/// <inheritdoc /> public void AddEntry(LogLevel level, string msg) { BuildLog log = GetThreadSafeLog(); log.m_Stack.Peek().Entries.Add(new LogEntry() { Level = level, Message = msg, Time = log.GetWallTime(), ThreadId = Thread.CurrentThread.ManagedThreadId }); }
private static void BeginBuildStepInternal(BuildLog log, LogLevel level, string stepName, bool multiThreaded) { LogStep node = new LogStep(); node.Level = level; node.Name = stepName; node.StartTime = log.GetWallTime(); node.ThreadId = Thread.CurrentThread.ManagedThreadId; log.m_Stack.Peek().Children.Add(node); log.m_Stack.Push(node); if (multiThreaded) { Debug.Assert(log.m_ThreadedLogs == null); log.m_ThreadedLogs = new ThreadLocal <BuildLog>(true); log.m_ThreadedLogs.Value = log; node.isThreaded = true; } }