예제 #1
0
        public static void Enter(string name)
        {
            if (!IsEnabled)
            {
                return;
            }

            long parentId = ActivityIds.Count > 0 ? ActivityIds.Last.Value : -1L;
            long id       = Interlocked.Increment(ref EventId);

            ActivityIds.AddLast(id);
            var profileEvent = new RawProfileEvent(Thread.CurrentThread.ManagedThreadId, parentId, id, Stopwatch.GetTimestamp(), ProfileEventType.StartMethod, name);

            WriterThread.Enqueue(profileEvent);
        }
예제 #2
0
        public static void Exit()
        {
            if (!IsEnabled)
            {
                return;
            }

            long id       = -1L;
            long parentId = -1L;

            if (ActivityIds.Count > 0)
            {
                id = ActivityIds.Last.Value;
                ActivityIds.RemoveLast();
                if (ActivityIds.Count > 0)
                {
                    parentId = ActivityIds.Last.Value;
                }
            }

            var profileEvent = new RawProfileEvent(Thread.CurrentThread.ManagedThreadId, parentId, id, Stopwatch.GetTimestamp(), ProfileEventType.EndMethod, string.Empty);

            WriterThread.Enqueue(profileEvent);
        }