public void IncrementCachedEventCounter(Guid eventReferenceName)
        {
            lock (m_eventTrackCacheLock)
            {
                Debug.Assert(m_eventTrackCache.ContainsKey(eventReferenceName),
                             string.Format("Event \"{0}\" is not being tracked.", eventReferenceName));

                EventTrackingCache cache = m_eventTrackCache[eventReferenceName];
                if ((cache.Mode & EventTrackingMode.Counter) != EventTrackingMode.Counter ||
                    !cache.Counter.HasValue)
                {
                    return;
                }

                cache.Counter++;
            }
        }
        public void FinishTrackingEvent(Guid eventReferenceName)
        {
            lock (m_eventTrackCacheLock)
            {
                if (!m_eventTrackCache.ContainsKey(eventReferenceName))
                {
                    return;
                }

                using (RuntimeEntityModel context = RuntimeEntityModel.CreateInstance())
                {
                    RTSessionRun rtSessionRun = context.RTSessionRunSet.Where
                                                    (s => s.Id == m_session.InternalSessionRunId).First <RTSessionRun>();
                    Debug.Assert(rtSessionRun != null,
                                 string.Format("Cannot find session run with Id ({0}) to track event", m_session.InternalSessionRunId));

                    EventTrackingCache       cache    = m_eventTrackCache[eventReferenceName];
                    RTGeneralPerformanceData perfData =
                        (from p in context.RTGeneralPerformanceDataSet
                         where p.RuntimeSessionGroupRun.Id == rtSessionRun.SessionGroupRun.Id &&
                         p.SessionUniqueId.Equals(rtSessionRun.Config.SessionUniqueId) &&
                         p.SourceUniqueId.Equals(m_sourceId) &&
                         p.CriterionReferenceName.Equals(eventReferenceName)
                         select p).First <RTGeneralPerformanceData>();

                    if (null == perfData)
                    {
                        perfData = RTGeneralPerformanceData.CreateRTGeneralPerformanceData(
                            0, rtSessionRun.Config.SessionUniqueId, m_sourceId, eventReferenceName, cache.FriendlyName);
                        perfData.RuntimeSessionGroupRun = rtSessionRun.SessionGroupRun;
                    }

                    perfData.PerfCounter    = cache.Counter;
                    perfData.PerfStartTime  = cache.StartTime;
                    perfData.PerfFinishTime = DateTime.Now;

                    context.TrySaveChanges();
                }

                m_eventTrackCache.Remove(eventReferenceName);
            }
        }