#nullable disable
using System ;
using System.Diagnostics ;
using System.Globalization ;
using Microsoft.Extensions.Logging ;
namespace MediaBrowser.Controller.Library
{
/// <summary>
/// Class Profiler.
/// </summary>
public class Profiler : IDisposable
{
/// <summary>
/// The name.
/// </summary>
readonly string _name ;
/// <summary>
/// The stopwatch.
/// </summary>
readonly Stopwatch _stopwatch ;
/// <summary>
/// The _logger.
/// </summary>
private readonly ILogger < Profiler > _logger ;
/// <summary>
/// Initializes a new instance of the <see cref="Profiler" /> class.
/// </summary>
/// <param name="name">The name.</param>
/// <param name="logger">The logger.</param>
public Profiler ( string name , ILogger < Profiler > logger )
{
this . _name = name ;
_logger = logger ;
_stopwatch = new Stopwatch ( ) ;
_stopwatch . Start ( ) ;
}
/// <summary>
/// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources.
/// </summary>
public void Dispose ( )
{
Dispose ( true ) ;
GC . SuppressFinalize ( this ) ;
}
/// <summary>
/// Releases unmanaged and - optionally - managed resources.
/// </summary>
/// <param name="dispose"><c>true</c> to release both managed and unmanaged resources; <c>false</c> to release only unmanaged resources.</param>
protected virtual void Dispose ( bool dispose )
{
if ( dispose )
{
_stopwatch . Stop ( ) ;
string message ;
if ( _stopwatch . ElapsedMilliseconds > 300000 )
{
message = string . Format (
CultureInfo . InvariantCulture ,
"{0} took {1} minutes." ,
_name ,
( ( float ) _stopwatch . ElapsedMilliseconds / 60000 ) . ToString ( "F" , CultureInfo . InvariantCulture ) ) ;
}
else
{
message = string . Format (
CultureInfo . InvariantCulture ,
"{0} took {1} seconds." ,
_name ,
( ( float ) _stopwatch . ElapsedMilliseconds / 1000 ) . ToString ( "#0.000" , CultureInfo . InvariantCulture ) ) ;
}
_logger . LogInformation ( message ) ;
}
}
}
}