TeamCity.MSBuild.Logger/PerformanceCounterFactory.cs (27 lines of code) (raw):

namespace TeamCity.MSBuild.Logger { using System; using System.Collections.Generic; using JetBrains.Annotations; // ReSharper disable once ClassNeverInstantiated.Global internal class PerformanceCounterFactory: IPerformanceCounterFactory { private readonly Func<IPerformanceCounter> _performanceCounterFactory; public PerformanceCounterFactory( [NotNull] Func<IPerformanceCounter> performanceCounterFactory) { _performanceCounterFactory = performanceCounterFactory ?? throw new ArgumentNullException(nameof(performanceCounterFactory)); } public IPerformanceCounter GetOrCreatePerformanceCounter(string scopeName, IDictionary<string, IPerformanceCounter> performanceCounters) { if (scopeName == null) throw new ArgumentNullException(nameof(scopeName)); if (performanceCounters.TryGetValue(scopeName, out var performanceCounter)) { return performanceCounter; } performanceCounter = _performanceCounterFactory(); performanceCounter.ScopeName = scopeName; performanceCounters.Add(scopeName, performanceCounter); return performanceCounter; } } }