using System;
using System.Diagnostics;
namespace Umbraco.Core.Logging
{
///
/// Implements by writing profiling results to an .
///
internal class LogProfiler : IProfiler
{
private readonly ILogger _logger;
public LogProfiler(ILogger logger)
{
_logger = logger;
}
///
public string Render()
{
return string.Empty;
}
///
public IDisposable Step(string name)
{
_logger.Debug("Begin: {ProfileName}", name);
return new LightDisposableTimer(duration => _logger.Info("End {ProfileName} ({ProfileDuration}ms)", name, duration));
}
///
public void Start()
{
// the log will always be started
}
///
public void Stop(bool discardResults = false)
{
// the log never stops
}
// a lightweight disposable timer
private class LightDisposableTimer : DisposableObjectSlim
{
private readonly Action _callback;
private readonly Stopwatch _stopwatch = Stopwatch.StartNew();
protected internal LightDisposableTimer(Action callback)
{
if (callback == null) throw new ArgumentNullException(nameof(callback));
_callback = callback;
}
protected override void DisposeResources()
{
_stopwatch.Stop();
_callback(_stopwatch.ElapsedMilliseconds);
}
}
}
}