protected void RecordTrackerRemoval(int groupIndex, DisposableBase.DisposeType disposeType, QpcTimeStamp trackerCreateTimeStamp) { lock (mutex) { QpcTimeStamp qpcNow = QpcTimeStamp.Now; double trackerAge = (qpcNow - trackerCreateTimeStamp).TotalSeconds; logPendingCount += globalTrackingInfo.RemoveInstance(qpcNow, disposeType, trackerAge).MapToInt(); GroupTrackingInfo trackingInfo = (groupIndex >= 0 && groupIndex < groupTrackingInfoList.Count) ? groupTrackingInfoList[groupIndex] : null; if (trackingInfo != null) { var emitter = (trackingInfo.GroupConfigItem ?? DefaultGroupConfig).InstanceActivityEmitter; logPendingCount += trackingInfo.RemoveInstance(qpcNow, disposeType, trackerAge).MapToInt(); if (emitter.IsEnabled) { emitter.Emit("Removed '{0}' disposeType:{1}, {2}", trackingInfo.GroupName, disposeType, trackingInfo.GetCountPartStr()); } } else { var emitter = DefaultGroupConfig.InstanceActivityEmitter; emitter.Emit("Attempt to removed tracker at group index {0} disposeType:{1} failed: The given index is not valid.", groupIndex, disposeType); } } }
/// <summary> /// This method creates and returns a tracker object for the given groupName. /// </summary> public IDisposable CreateTracker(string groupName) { if (!Enable) { return(null); } groupName = groupName.MapNullToEmpty(); lock (mutex) { GroupTrackingInfo trackingInfo = groupTrackingInfoDictionary.SafeTryGetValue(groupName); if (trackingInfo == null) { var groupConfigItem = groupConfigItemDictionary.SafeTryGetValue(groupName); trackingInfo = new GroupTrackingInfo(groupTrackingInfoList.Count, groupName, groupConfigItem); groupTrackingInfoList.Add(trackingInfo); groupTrackingInfoDictionary[groupName] = trackingInfo; } var tracker = new LifetimeTrackerImpl(trackingInfo.GroupIndex, CreateExtraWeight(trackingInfo.GroupConfigItem), QpcTimeStamp.Now); InnerRecordAddedTracker(trackingInfo); return(tracker); } }
private void InnerRecordAddedTracker(GroupTrackingInfo trackingInfo) { QpcTimeStamp qpcNow = QpcTimeStamp.Now; logPendingCount += globalTrackingInfo.AddInstance(qpcNow).MapToInt(); logPendingCount += trackingInfo.AddInstance(qpcNow).MapToInt(); var emitter = (trackingInfo.GroupConfigItem ?? DefaultGroupConfig).InstanceActivityEmitter; if (emitter.IsEnabled) { emitter.Emit("Added '{0}': {1}", trackingInfo.GroupName, trackingInfo.GetCountPartStr()); } }