internal static void Add( this AnalyzerTelemetryInfo analyzerTelemetryInfo, AnalyzerTelemetryInfo addendum ) { analyzerTelemetryInfo.CodeBlockActionsCount += addendum.CodeBlockActionsCount; analyzerTelemetryInfo.CodeBlockEndActionsCount += addendum.CodeBlockEndActionsCount; analyzerTelemetryInfo.CodeBlockStartActionsCount += addendum.CodeBlockStartActionsCount; analyzerTelemetryInfo.CompilationActionsCount += addendum.CompilationActionsCount; analyzerTelemetryInfo.CompilationEndActionsCount += addendum.CompilationEndActionsCount; analyzerTelemetryInfo.CompilationStartActionsCount += addendum.CompilationStartActionsCount; analyzerTelemetryInfo.ExecutionTime += addendum.ExecutionTime; analyzerTelemetryInfo.OperationActionsCount += addendum.OperationActionsCount; analyzerTelemetryInfo.OperationBlockActionsCount += addendum.OperationBlockActionsCount; analyzerTelemetryInfo.OperationBlockEndActionsCount += addendum.OperationBlockEndActionsCount; analyzerTelemetryInfo.OperationBlockStartActionsCount += addendum.OperationBlockStartActionsCount; analyzerTelemetryInfo.SemanticModelActionsCount += addendum.SemanticModelActionsCount; analyzerTelemetryInfo.SymbolActionsCount += addendum.SymbolActionsCount; analyzerTelemetryInfo.SymbolStartActionsCount += addendum.SymbolStartActionsCount; analyzerTelemetryInfo.SymbolEndActionsCount += addendum.SymbolEndActionsCount; analyzerTelemetryInfo.SyntaxNodeActionsCount += addendum.SyntaxNodeActionsCount; analyzerTelemetryInfo.SyntaxTreeActionsCount += addendum.SyntaxTreeActionsCount; analyzerTelemetryInfo.AdditionalFileActionsCount += addendum.AdditionalFileActionsCount; analyzerTelemetryInfo.SuppressionActionsCount += addendum.SuppressionActionsCount; }
private static void WriteTelemetry(ObjectWriter writer, AnalyzerTelemetryInfo telemetryInfo, CancellationToken cancellationToken) { cancellationToken.ThrowIfCancellationRequested(); writer.WriteInt32(telemetryInfo.CompilationStartActionsCount); writer.WriteInt32(telemetryInfo.CompilationEndActionsCount); writer.WriteInt32(telemetryInfo.CompilationActionsCount); writer.WriteInt32(telemetryInfo.SyntaxTreeActionsCount); writer.WriteInt32(telemetryInfo.AdditionalFileActionsCount); writer.WriteInt32(telemetryInfo.SemanticModelActionsCount); writer.WriteInt32(telemetryInfo.SymbolActionsCount); writer.WriteInt32(telemetryInfo.SymbolStartActionsCount); writer.WriteInt32(telemetryInfo.SymbolEndActionsCount); writer.WriteInt32(telemetryInfo.SyntaxNodeActionsCount); writer.WriteInt32(telemetryInfo.CodeBlockStartActionsCount); writer.WriteInt32(telemetryInfo.CodeBlockEndActionsCount); writer.WriteInt32(telemetryInfo.CodeBlockActionsCount); writer.WriteInt32(telemetryInfo.OperationActionsCount); writer.WriteInt32(telemetryInfo.OperationBlockActionsCount); writer.WriteInt32(telemetryInfo.OperationBlockStartActionsCount); writer.WriteInt32(telemetryInfo.OperationBlockEndActionsCount); writer.WriteInt32(telemetryInfo.SuppressionActionsCount); writer.WriteInt64(telemetryInfo.ExecutionTime.Ticks); writer.WriteBoolean(telemetryInfo.Concurrent); }
public Data( AnalyzerTelemetryInfo analyzerTelemetryInfo, bool isTelemetryCollectionAllowed ) { CodeBlockActionsCount = analyzerTelemetryInfo.CodeBlockActionsCount; CodeBlockEndActionsCount = analyzerTelemetryInfo.CodeBlockEndActionsCount; CodeBlockStartActionsCount = analyzerTelemetryInfo.CodeBlockStartActionsCount; CompilationActionsCount = analyzerTelemetryInfo.CompilationActionsCount; CompilationEndActionsCount = analyzerTelemetryInfo.CompilationEndActionsCount; CompilationStartActionsCount = analyzerTelemetryInfo.CompilationStartActionsCount; SemanticModelActionsCount = analyzerTelemetryInfo.SemanticModelActionsCount; SymbolActionsCount = analyzerTelemetryInfo.SymbolActionsCount; SyntaxNodeActionsCount = analyzerTelemetryInfo.SyntaxNodeActionsCount; SyntaxTreeActionsCount = analyzerTelemetryInfo.SyntaxTreeActionsCount; AdditionalFileActionsCount = analyzerTelemetryInfo.AdditionalFileActionsCount; OperationActionsCount = analyzerTelemetryInfo.OperationActionsCount; OperationBlockActionsCount = analyzerTelemetryInfo.OperationBlockActionsCount; OperationBlockEndActionsCount = analyzerTelemetryInfo.OperationBlockEndActionsCount; OperationBlockStartActionsCount = analyzerTelemetryInfo.OperationBlockStartActionsCount; SymbolStartActionsCount = analyzerTelemetryInfo.SymbolStartActionsCount; SymbolEndActionsCount = analyzerTelemetryInfo.SymbolEndActionsCount; SuppressionActionsCount = analyzerTelemetryInfo.SuppressionActionsCount; IsTelemetryCollectionAllowed = isTelemetryCollectionAllowed; }
public void UpdateAnalyzerActionsTelemetry(DiagnosticAnalyzer analyzer, AnalyzerTelemetryInfo analyzerTelemetryInfo, bool isTelemetryCollectionAllowed) { lock (_guard) { _analyzerInfoMap = _analyzerInfoMap.SetItem(analyzer.GetType(), new Data(analyzerTelemetryInfo, isTelemetryCollectionAllowed)); } }
private static void WriteTelemetry(string analyzerName, AnalyzerTelemetryInfo telemetry) { WriteLine($"Statistics for {analyzerName}:", ConsoleColor.DarkCyan); WriteLine($"Concurrent: {telemetry.Concurrent}", telemetry.Concurrent ? ConsoleColor.White : ConsoleColor.DarkRed); WriteLine($"Execution time (ms): {telemetry.ExecutionTime.TotalMilliseconds}", ConsoleColor.White); WriteLine($"Code Block Actions: {telemetry.CodeBlockActionsCount}", ConsoleColor.White); WriteLine($"Code Block Start Actions: {telemetry.CodeBlockStartActionsCount}", ConsoleColor.White); WriteLine($"Code Block End Actions: {telemetry.CodeBlockEndActionsCount}", ConsoleColor.White); WriteLine($"Compilation Actions: {telemetry.CompilationActionsCount}", ConsoleColor.White); WriteLine($"Compilation Start Actions: {telemetry.CompilationStartActionsCount}", ConsoleColor.White); WriteLine($"Compilation End Actions: {telemetry.CompilationEndActionsCount}", ConsoleColor.White); WriteLine($"Operation Actions: {telemetry.OperationActionsCount}", ConsoleColor.White); WriteLine($"Operation Block Actions: {telemetry.OperationBlockActionsCount}", ConsoleColor.White); WriteLine($"Operation Block Start Actions: {telemetry.OperationBlockStartActionsCount}", ConsoleColor.White); WriteLine($"Operation Block End Actions: {telemetry.OperationBlockEndActionsCount}", ConsoleColor.White); WriteLine($"Semantic Model Actions: {telemetry.SemanticModelActionsCount}", ConsoleColor.White); WriteLine($"Symbol Actions: {telemetry.SymbolActionsCount}", ConsoleColor.White); WriteLine($"Symbol Start Actions: {telemetry.SymbolStartActionsCount}", ConsoleColor.White); WriteLine($"Symbol End Actions: {telemetry.SymbolEndActionsCount}", ConsoleColor.White); WriteLine($"Syntax Node Actions: {telemetry.SyntaxNodeActionsCount}", ConsoleColor.White); WriteLine($"Syntax Tree Actions: {telemetry.SyntaxTreeActionsCount}", ConsoleColor.White); WriteLine($"Suppression Actions: {telemetry.SuppressionActionsCount}", ConsoleColor.White); }
public static void UpdateAnalyzerTypeCount(DiagnosticAnalyzer analyzer, AnalyzerTelemetryInfo analyzerTelemetryInfo, Project projectOpt, DiagnosticLogAggregator logAggregator) { if (analyzerTelemetryInfo == null || analyzer == null || logAggregator == null) { return; } logAggregator.UpdateAnalyzerTypeCount(analyzer, analyzerTelemetryInfo, projectOpt); }
public void SetAnalyzerTypeCount(AnalyzerTelemetryInfo analyzerTelemetryInfo) { Counts[0] = analyzerTelemetryInfo.CodeBlockActionsCount; Counts[1] = analyzerTelemetryInfo.CodeBlockEndActionsCount; Counts[2] = analyzerTelemetryInfo.CodeBlockStartActionsCount; Counts[3] = analyzerTelemetryInfo.CompilationActionsCount; Counts[4] = analyzerTelemetryInfo.CompilationEndActionsCount; Counts[5] = analyzerTelemetryInfo.CompilationStartActionsCount; Counts[6] = analyzerTelemetryInfo.SemanticModelActionsCount; Counts[7] = analyzerTelemetryInfo.SymbolActionsCount; Counts[8] = analyzerTelemetryInfo.SyntaxNodeActionsCount; Counts[9] = analyzerTelemetryInfo.SyntaxTreeActionsCount; }
private static void WriteExecutionTimes( string analyzerName, int longestAnalyzerName, AnalyzerTelemetryInfo telemetry ) { var padding = new string(' ', longestAnalyzerName - analyzerName.Length); WriteLine( $"{analyzerName}:{padding} {telemetry.ExecutionTime.TotalMilliseconds, 7:0}", ConsoleColor.White ); }
public void UpdateAnalyzerTypeCount(DiagnosticAnalyzer analyzer, AnalyzerTelemetryInfo analyzerTelemetryInfo) { var isTelemetryAllowed = DiagnosticAnalyzerLogger.AllowsTelemetry(analyzer, _analyzerService); ImmutableInterlocked.AddOrUpdate( ref _analyzerInfoMap, analyzer.GetType(), addValue: new AnalyzerInfo(analyzer, analyzerTelemetryInfo, isTelemetryAllowed), updateValueFactory: (k, ai) => { ai.SetAnalyzerTypeCount(analyzerTelemetryInfo); return(ai); }); }
public void UpdateAnalyzerTypeCount(DiagnosticAnalyzer analyzer, AnalyzerTelemetryInfo analyzerTelemetryInfo, Project projectOpt) { var telemetry = DiagnosticAnalyzerLogger.AllowsTelemetry(_owner, analyzer, projectOpt?.Id); ImmutableInterlocked.AddOrUpdate( ref _analyzerInfoMap, analyzer.GetType(), addValue: new AnalyzerInfo(analyzer, analyzerTelemetryInfo, telemetry), updateValueFactory: (k, ai) => { ai.SetAnalyzerTypeCount(analyzerTelemetryInfo); return(ai); }); }
public AnalyzerInfo(DiagnosticAnalyzer analyzer, AnalyzerTelemetryInfo analyzerTelemetryInfo, bool telemetry) { CLRType = analyzer.GetType(); Telemetry = telemetry; Counts[0] = analyzerTelemetryInfo.CodeBlockActionsCount; Counts[1] = analyzerTelemetryInfo.CodeBlockEndActionsCount; Counts[2] = analyzerTelemetryInfo.CodeBlockStartActionsCount; Counts[3] = analyzerTelemetryInfo.CompilationActionsCount; Counts[4] = analyzerTelemetryInfo.CompilationEndActionsCount; Counts[5] = analyzerTelemetryInfo.CompilationStartActionsCount; Counts[6] = analyzerTelemetryInfo.SemanticModelActionsCount; Counts[7] = analyzerTelemetryInfo.SymbolActionsCount; Counts[8] = analyzerTelemetryInfo.SyntaxNodeActionsCount; Counts[9] = analyzerTelemetryInfo.SyntaxTreeActionsCount; }
public static void Add(this AnalyzerTelemetryInfo telemetryInfo, AnalyzerTelemetryInfo telemetryInfoToAdd) { telemetryInfo.CodeBlockActionsCount += telemetryInfoToAdd.CodeBlockActionsCount; telemetryInfo.CodeBlockEndActionsCount += telemetryInfoToAdd.CodeBlockEndActionsCount; telemetryInfo.CodeBlockStartActionsCount += telemetryInfoToAdd.CodeBlockStartActionsCount; telemetryInfo.CompilationActionsCount += telemetryInfoToAdd.CompilationActionsCount; telemetryInfo.CompilationEndActionsCount += telemetryInfoToAdd.CompilationEndActionsCount; telemetryInfo.CompilationStartActionsCount += telemetryInfoToAdd.CompilationStartActionsCount; telemetryInfo.ExecutionTime += telemetryInfoToAdd.ExecutionTime; telemetryInfo.OperationActionsCount += telemetryInfoToAdd.OperationActionsCount; telemetryInfo.OperationBlockActionsCount += telemetryInfoToAdd.OperationBlockActionsCount; telemetryInfo.OperationBlockEndActionsCount += telemetryInfoToAdd.OperationBlockEndActionsCount; telemetryInfo.OperationBlockStartActionsCount += telemetryInfoToAdd.OperationBlockStartActionsCount; telemetryInfo.SemanticModelActionsCount += telemetryInfoToAdd.SemanticModelActionsCount; telemetryInfo.SymbolActionsCount += telemetryInfoToAdd.SymbolActionsCount; telemetryInfo.SyntaxNodeActionsCount += telemetryInfoToAdd.SyntaxNodeActionsCount; telemetryInfo.SyntaxTreeActionsCount += telemetryInfoToAdd.SyntaxTreeActionsCount; }
private ImmutableDictionary <DiagnosticAnalyzer, AnalyzerTelemetryInfo> GetTelemetryInfo( ImmutableArray <DiagnosticAnalyzer> analyzers, CancellationToken cancellationToken) { var builder = ImmutableDictionary.CreateBuilder <DiagnosticAnalyzer, AnalyzerTelemetryInfo>(); lock (_gate) { foreach (var analyzer in analyzers) { var actionCounts = _analyzerActionCounts[analyzer]; var executionTime = _analyzerExecutionTimeOpt != null ? _analyzerExecutionTimeOpt[analyzer] : default(TimeSpan); var telemetryInfo = new AnalyzerTelemetryInfo(actionCounts, executionTime); builder.Add(analyzer, telemetryInfo); } } return(builder.ToImmutable()); }
private ImmutableDictionary <DiagnosticAnalyzer, AnalyzerTelemetryInfo> GetTelemetryInfo( ImmutableArray <DiagnosticAnalyzer> analyzers) { var builder = ImmutableDictionary.CreateBuilder <DiagnosticAnalyzer, AnalyzerTelemetryInfo>(); lock (_gate) { foreach (var analyzer in analyzers) { var actionCounts = _analyzerActionCounts[analyzer]; var suppressionActionCounts = analyzer is DiagnosticSuppressor ? 1 : 0; var executionTime = _analyzerExecutionTimeOpt != null ? _analyzerExecutionTimeOpt[analyzer] : default; var telemetryInfo = new AnalyzerTelemetryInfo(actionCounts, suppressionActionCounts, executionTime); builder.Add(analyzer, telemetryInfo); } } return(builder.ToImmutable()); }
private static void Serialize(ObjectWriter writer, AnalyzerTelemetryInfo telemetryInfo, CancellationToken cancellationToken) { cancellationToken.ThrowIfCancellationRequested(); writer.WriteInt32(telemetryInfo.CompilationStartActionsCount); writer.WriteInt32(telemetryInfo.CompilationEndActionsCount); writer.WriteInt32(telemetryInfo.CompilationActionsCount); writer.WriteInt32(telemetryInfo.SyntaxTreeActionsCount); writer.WriteInt32(telemetryInfo.SemanticModelActionsCount); writer.WriteInt32(telemetryInfo.SymbolActionsCount); writer.WriteInt32(telemetryInfo.SyntaxNodeActionsCount); writer.WriteInt32(telemetryInfo.CodeBlockStartActionsCount); writer.WriteInt32(telemetryInfo.CodeBlockEndActionsCount); writer.WriteInt32(telemetryInfo.CodeBlockActionsCount); writer.WriteInt32(telemetryInfo.OperationActionsCount); writer.WriteInt32(telemetryInfo.OperationBlockActionsCount); writer.WriteInt32(telemetryInfo.OperationBlockStartActionsCount); writer.WriteInt32(telemetryInfo.OperationBlockEndActionsCount); writer.WriteInt64(telemetryInfo.ExecutionTime.Ticks); }
private void WriteProjectAnalysisResults(IList <ProjectAnalysisResult> results) { if (Options.LogAnalyzerExecutionTime) { WriteExecutionTime(); } int totalCount = results.Sum(f => f.Diagnostics.Length + f.CompilerDiagnostics.Length); if (totalCount > 0) { WriteLine(Verbosity.Normal); Dictionary <DiagnosticDescriptor, int> diagnosticsByDescriptor = results .SelectMany(f => f.Diagnostics.Concat(f.CompilerDiagnostics)) .GroupBy(f => f.Descriptor, DiagnosticDescriptorComparer.Id) .ToDictionary(f => f.Key, f => f.Count()); int maxCountLength = Math.Max(totalCount.ToString().Length, diagnosticsByDescriptor.Max(f => f.Value.ToString().Length)); int maxIdLength = diagnosticsByDescriptor.Max(f => f.Key.Id.Length); foreach (KeyValuePair <DiagnosticDescriptor, int> kvp in diagnosticsByDescriptor.OrderBy(f => f.Key.Id)) { WriteLine($"{kvp.Value.ToString().PadLeft(maxCountLength)} {kvp.Key.Id.PadRight(maxIdLength)} {kvp.Key.Title}", Verbosity.Normal); } } WriteLine(Verbosity.Minimal); WriteLine($"{totalCount} {((totalCount == 1) ? "diagnostic" : "diagnostics")} found", ConsoleColors.Green, Verbosity.Minimal); void WriteExecutionTime() { var telemetryInfos = new Dictionary <DiagnosticAnalyzer, AnalyzerTelemetryInfo>(); foreach (ProjectAnalysisResult result in results) { foreach (KeyValuePair <DiagnosticAnalyzer, AnalyzerTelemetryInfo> kvp in result.Telemetry) { DiagnosticAnalyzer analyzer = kvp.Key; if (!telemetryInfos.TryGetValue(analyzer, out AnalyzerTelemetryInfo telemetryInfo)) { telemetryInfo = new AnalyzerTelemetryInfo(); } telemetryInfo.Add(kvp.Value); telemetryInfos[analyzer] = telemetryInfo; } } using (IEnumerator <KeyValuePair <DiagnosticAnalyzer, AnalyzerTelemetryInfo> > en = telemetryInfos .Where(f => f.Value.ExecutionTime >= MinimalExecutionTime) .OrderByDescending(f => f.Value.ExecutionTime) .GetEnumerator()) { if (en.MoveNext()) { WriteLine(Verbosity.Minimal); do { WriteLine($"{en.Current.Value.ExecutionTime:mm\\:ss\\.fff} '{en.Current.Key.GetType().FullName}'", Verbosity.Minimal); }while (en.MoveNext()); } } } }
public AnalyzerInfo(DiagnosticAnalyzer analyzer, AnalyzerTelemetryInfo analyzerTelemetryInfo, bool telemetry) { CLRType = analyzer.GetType(); Telemetry = telemetry; SetAnalyzerTypeCount(analyzerTelemetryInfo); }