示例#1
0
 private static bool LogVerbose(LifecycleTag tag)
 {
     return(tag == LifecycleTag.EnqueueOutgoing ||
            tag == LifecycleTag.CreateNewPlacement ||
            tag == LifecycleTag.EnqueueIncoming ||
            tag == LifecycleTag.InvokeIncoming);
 }
示例#2
0
        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);
            }
        }