private static bool LogVerbose(LifecycleTag tag) { return(tag == LifecycleTag.EnqueueOutgoing || tag == LifecycleTag.CreateNewPlacement || tag == LifecycleTag.EnqueueIncoming || tag == LifecycleTag.InvokeIncoming); }
public void AddTimestamp(LifecycleTag tag) { if (logger.IsVerbose2) { if (LogVerbose(tag)) { logger.Verbose("Message {0} {1}", tag, this); } else if (logger.IsVerbose2) { logger.Verbose2("Message {0} {1}", tag, this); } } if (WriteMessagingTraces) { var now = DateTime.UtcNow; var timestamp = new List <object> { tag, now }; object val; List <object> list = null; if (headers.TryGetValue(Header.TIMESTAMPS, out val)) { list = val as List <object>; } if (list == null) { list = new List <object>(); lock (headers) { headers[Header.TIMESTAMPS] = list; } } else if (list.Count > 0) { var last = list[list.Count - 1] as List <object>; if (last != null) { var context = DebugContext; if (String.IsNullOrEmpty(context)) { context = "Unspecified"; } TransitionStats[,] entry; bool found; lock (lifecycleStatistics) { found = lifecycleStatistics.TryGetValue(context, out entry); } if (!found) { var newEntry = new TransitionStats[32, 32]; for (int i = 0; i < 32; i++) { for (int j = 0; j < 32; j++) { newEntry[i, j] = new TransitionStats(); } } lock (lifecycleStatistics) { if (!lifecycleStatistics.TryGetValue(context, out entry)) { entry = newEntry; lifecycleStatistics.Add(context, entry); } } } int from = (int)(LifecycleTag)(last[0]); int to = (int)tag; entry[from, to].RecordTransition(now.Subtract((DateTime)last[1])); } } list.Add(timestamp); } if (OnTrace != null) { OnTrace(this, tag); } }