|
// 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 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);
}
}
}
|