File: PerfMargin\PerfEventActivityLogger.cs
Web Access
Project: src\src\VisualStudio\VisualStudioDiagnosticsToolWindow\Roslyn.VisualStudio.DiagnosticsWindow.csproj (Roslyn.VisualStudio.DiagnosticsWindow)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
 
using System.Threading;
using Microsoft.CodeAnalysis.Internal.Log;
 
namespace Roslyn.Hosting.Diagnostics.PerfMargin;
 
// A slightly modified version of Roslyn.Services.Internal.Log.EtwLogger.
// This version updates the DataModel whenever an operations starts or stops.  There
// isn't an efficient way to listen to ETW events within the same process unless
// running as admin, so we need to add our logic to the logger instead.
internal sealed class PerfEventActivityLogger : ILogger
{
    private readonly DataModel _model;
 
    public PerfEventActivityLogger(DataModel model)
    {
        _model = model;
    }
 
    public bool IsEnabled(FunctionId functionId)
    {
        return true;
    }
 
    public void Log(FunctionId functionId, LogMessage logMessage)
    {
        // do nothing
    }
 
    public void LogBlockStart(FunctionId functionId, LogMessage logMessage, int uniquePairId, CancellationToken cancellationToken)
    {
        _model.BlockStart(functionId);
    }
 
    public void LogBlockEnd(FunctionId functionId, LogMessage logMessage, int uniquePairId, int delta, CancellationToken cancellationToken)
    {
        _model.BlockDisposed(functionId);
    }
}