diff --git a/src/Workspaces/Core/Portable/LinkedFileDiffMerging/LinkedFileDiffMergingLogger.cs b/src/Workspaces/Core/Portable/LinkedFileDiffMerging/LinkedFileDiffMergingLogger.cs index 23cc93fdcb49f8b2376d1d47066e3256a4b76803..0dbd5963b16f839857adcd70f582d29a8e6cb9d7 100644 --- a/src/Workspaces/Core/Portable/LinkedFileDiffMerging/LinkedFileDiffMergingLogger.cs +++ b/src/Workspaces/Core/Portable/LinkedFileDiffMerging/LinkedFileDiffMergingLogger.cs @@ -11,8 +11,7 @@ namespace Microsoft.CodeAnalysis { internal class LinkedFileDiffMergingLogger { - private const string Id = nameof(Id); - private static ConcurrentDictionary LogAggregators = new ConcurrentDictionary(); + private static LogAggregator LogAggregator = new LogAggregator(); internal enum MergeInfo { @@ -31,98 +30,70 @@ internal static void LogSession(Workspace workspace, LinkedFileDiffMergingSessio { if (sessionInfo.LinkedFileGroups.Count > 1) { - int correlationId = GetCorrelationId(workspace); - - LogNewSessionWithLinkedFiles(correlationId); - LogNumberOfLinkedFileGroupsProcessed(correlationId, sessionInfo.LinkedFileGroups.Count); + LogNewSessionWithLinkedFiles(); + LogNumberOfLinkedFileGroupsProcessed(sessionInfo.LinkedFileGroups.Count); foreach (var groupInfo in sessionInfo.LinkedFileGroups) { - LogNumberOfIdenticalDiffs(correlationId, groupInfo.IdenticalDiffs); - LogNumberOfIsolatedDiffs(correlationId, groupInfo.IsolatedDiffs); - LogNumberOfOverlappingDistinctDiffs(correlationId, groupInfo.OverlappingDistinctDiffs); - LogNumberOfOverlappingDistinctDiffsWithSameSpan(correlationId, groupInfo.OverlappingDistinctDiffsWithSameSpan); - LogNumberOfOverlappingDistinctDiffsWithSameSpanAndSubstringRelation(correlationId, groupInfo.OverlappingDistinctDiffsWithSameSpanAndSubstringRelation); - LogNumberOfInsertedMergeConflictComments(correlationId, groupInfo.InsertedMergeConflictComments); - LogNumberOfInsertedMergeConflictCommentsAtAdjustedLocation(correlationId, groupInfo.InsertedMergeConflictCommentsAtAdjustedLocation); + LogNumberOfIdenticalDiffs(groupInfo.IdenticalDiffs); + LogNumberOfIsolatedDiffs(groupInfo.IsolatedDiffs); + LogNumberOfOverlappingDistinctDiffs(groupInfo.OverlappingDistinctDiffs); + LogNumberOfOverlappingDistinctDiffsWithSameSpan(groupInfo.OverlappingDistinctDiffsWithSameSpan); + LogNumberOfOverlappingDistinctDiffsWithSameSpanAndSubstringRelation(groupInfo.OverlappingDistinctDiffsWithSameSpanAndSubstringRelation); + LogNumberOfInsertedMergeConflictComments(groupInfo.InsertedMergeConflictComments); + LogNumberOfInsertedMergeConflictCommentsAtAdjustedLocation(groupInfo.InsertedMergeConflictCommentsAtAdjustedLocation); if (groupInfo.InsertedMergeConflictComments > 0 || groupInfo.InsertedMergeConflictCommentsAtAdjustedLocation > 0) { - Logger.Log(FunctionId.Workspace_Solution_LinkedFileDiffMergingSession_LinkedFileGroup, SessionLogMessage.Create(correlationId, groupInfo)); + Logger.Log(FunctionId.Workspace_Solution_LinkedFileDiffMergingSession_LinkedFileGroup, SessionLogMessage.Create(groupInfo)); } } } } - private static int GetCorrelationId(Workspace workspace) - { - int correlationId = workspace.GetHashCode(); - if (!LogAggregators.Keys.Contains(correlationId)) - { - LogAggregators.TryAdd(correlationId, new LogAggregator()); - } - - return correlationId; - } - - private static void LogNewSessionWithLinkedFiles(int correlationId) => - Log(correlationId, (int)MergeInfo.SessionsWithLinkedFiles, 1); - - private static void LogNumberOfLinkedFileGroupsProcessed(int correlationId, int linkedFileGroupsProcessed) => - Log(correlationId, (int)MergeInfo.LinkedFileGroupsProcessed, linkedFileGroupsProcessed); + private static void LogNewSessionWithLinkedFiles() => + Log((int)MergeInfo.SessionsWithLinkedFiles, 1); - private static void LogNumberOfIdenticalDiffs(int correlationId, int identicalDiffs) => - Log(correlationId, (int)MergeInfo.IdenticalDiffs, identicalDiffs); + private static void LogNumberOfLinkedFileGroupsProcessed(int linkedFileGroupsProcessed) => + Log((int)MergeInfo.LinkedFileGroupsProcessed, linkedFileGroupsProcessed); - private static void LogNumberOfIsolatedDiffs(int correlationId, int isolatedDiffs) => - Log(correlationId, (int)MergeInfo.IsolatedDiffs, isolatedDiffs); + private static void LogNumberOfIdenticalDiffs(int identicalDiffs) => + Log((int)MergeInfo.IdenticalDiffs, identicalDiffs); - private static void LogNumberOfOverlappingDistinctDiffs(int correlationId, int overlappingDistinctDiffs) => - Log(correlationId, (int)MergeInfo.OverlappingDistinctDiffs, overlappingDistinctDiffs); + private static void LogNumberOfIsolatedDiffs(int isolatedDiffs) => + Log((int)MergeInfo.IsolatedDiffs, isolatedDiffs); - private static void LogNumberOfOverlappingDistinctDiffsWithSameSpan(int correlationId, int overlappingDistinctDiffsWithSameSpan) => - Log(correlationId, (int)MergeInfo.OverlappingDistinctDiffsWithSameSpan, overlappingDistinctDiffsWithSameSpan); + private static void LogNumberOfOverlappingDistinctDiffs(int overlappingDistinctDiffs) => + Log((int)MergeInfo.OverlappingDistinctDiffs, overlappingDistinctDiffs); - private static void LogNumberOfOverlappingDistinctDiffsWithSameSpanAndSubstringRelation(int correlationId, int overlappingDistinctDiffsWithSameSpanAndSubstringRelation) => - Log(correlationId, (int)MergeInfo.OverlappingDistinctDiffsWithSameSpanAndSubstringRelation, overlappingDistinctDiffsWithSameSpanAndSubstringRelation); + private static void LogNumberOfOverlappingDistinctDiffsWithSameSpan(int overlappingDistinctDiffsWithSameSpan) => + Log((int)MergeInfo.OverlappingDistinctDiffsWithSameSpan, overlappingDistinctDiffsWithSameSpan); - private static void LogNumberOfInsertedMergeConflictComments(int correlationId, int insertedMergeConflictComments) => - Log(correlationId, (int)MergeInfo.InsertedMergeConflictComments, insertedMergeConflictComments); + private static void LogNumberOfOverlappingDistinctDiffsWithSameSpanAndSubstringRelation(int overlappingDistinctDiffsWithSameSpanAndSubstringRelation) => + Log((int)MergeInfo.OverlappingDistinctDiffsWithSameSpanAndSubstringRelation, overlappingDistinctDiffsWithSameSpanAndSubstringRelation); - private static void LogNumberOfInsertedMergeConflictCommentsAtAdjustedLocation(int correlationId, int insertedMergeConflictCommentsAtAdjustedLocation) => - Log(correlationId, (int)MergeInfo.InsertedMergeConflictCommentsAtAdjustedLocation, insertedMergeConflictCommentsAtAdjustedLocation); + private static void LogNumberOfInsertedMergeConflictComments(int insertedMergeConflictComments) => + Log((int)MergeInfo.InsertedMergeConflictComments, insertedMergeConflictComments); - private static void Log(int correlationId, int mergeInfo, int count) - { - LogAggregators[correlationId].IncreaseCountBy(mergeInfo, count); - } + private static void LogNumberOfInsertedMergeConflictCommentsAtAdjustedLocation(int insertedMergeConflictCommentsAtAdjustedLocation) => + Log((int)MergeInfo.InsertedMergeConflictCommentsAtAdjustedLocation, insertedMergeConflictCommentsAtAdjustedLocation); - internal static void ReportTelemetry(int correlationId) + private static void Log(int mergeInfo, int count) { - if (LogAggregators.ContainsKey(correlationId)) - { - Logger.Log(FunctionId.Workspace_Solution_LinkedFileDiffMergingSession, KeyValueLogMessage.Create(m => - { - m[Id] = correlationId; - - foreach (var kv in LogAggregators[correlationId]) - { - var mergeInfo = ((MergeInfo)kv.Key).ToString("f"); - m[mergeInfo] = kv.Value.GetCount(); - } - })); - LogAggregator value; - LogAggregators.TryRemove(correlationId, out value); - } + LogAggregator.IncreaseCountBy(mergeInfo, count); } internal static void ReportTelemetry() { - foreach (var correlationId in LogAggregators.Keys) + Logger.Log(FunctionId.Workspace_Solution_LinkedFileDiffMergingSession, KeyValueLogMessage.Create(m => { - ReportTelemetry(correlationId); - } + foreach (var kv in LogAggregator) + { + var mergeInfo = ((MergeInfo)kv.Key).ToString("f"); + m[mergeInfo] = kv.Value.GetCount(); + } + })); } private static class SessionLogMessage @@ -130,12 +101,10 @@ private static class SessionLogMessage private const string LinkedDocuments = nameof(LinkedDocuments); private const string DocumentsWithChanges = nameof(DocumentsWithChanges); - public static KeyValueLogMessage Create(int correlationId, LinkedFileGroupSessionInfo groupInfo) + public static KeyValueLogMessage Create(LinkedFileGroupSessionInfo groupInfo) { return KeyValueLogMessage.Create(m => { - m[Id] = correlationId; - m[LinkedDocuments] = groupInfo.LinkedDocuments; m[DocumentsWithChanges] = groupInfo.DocumentsWithChanges; m[MergeInfo.IdenticalDiffs.ToString("f")] = groupInfo.IdenticalDiffs;