| File: Performance.cs | Web Access |
| Project: src\src\Controls\src\Core\Controls.Core.csproj (Microsoft.Maui.Controls) |
#nullable disable using System; using System.ComponentModel; using System.Runtime.CompilerServices; using System.Threading; namespace Microsoft.Maui.Controls.Internals { [EditorBrowsable(EditorBrowsableState.Never)] public interface IPerformanceProvider { void Stop(string reference, string tag, string path, string member); void Start(string reference, string tag, string path, string member); } /// <include file="../../docs/Microsoft.Maui.Controls.Internals/Performance.xml" path="Type[@FullName='Microsoft.Maui.Controls.Internals.Performance']/Docs/*" /> [EditorBrowsable(EditorBrowsableState.Never)] public class Performance { static long Reference; /// <include file="../../docs/Microsoft.Maui.Controls.Internals/Performance.xml" path="//Member[@MemberName='Provider']/Docs/*" /> public static IPerformanceProvider Provider { get; private set; } /// <include file="../../docs/Microsoft.Maui.Controls.Internals/Performance.xml" path="//Member[@MemberName='SetProvider']/Docs/*" /> public static void SetProvider(IPerformanceProvider instance) { Provider = instance; } /// <include file="../../docs/Microsoft.Maui.Controls.Internals/Performance.xml" path="//Member[@MemberName='Start'][1]/Docs/*" /> public static void Start(out string reference, string tag = null, [CallerFilePath] string path = null, [CallerMemberName] string member = null) { if (Provider == null) { reference = String.Empty; return; } reference = Interlocked.Increment(ref Reference).ToString(); Provider.Start(reference, tag, path, member); } /// <include file="../../docs/Microsoft.Maui.Controls.Internals/Performance.xml" path="//Member[@MemberName='Start'][2]/Docs/*" /> public static void Start(string reference, string tag = null, [CallerFilePath] string path = null, [CallerMemberName] string member = null) { Provider?.Start(reference, tag, path, member); } /// <include file="../../docs/Microsoft.Maui.Controls.Internals/Performance.xml" path="//Member[@MemberName='Stop']/Docs/*" /> public static void Stop(string reference, string tag = null, [CallerFilePath] string path = null, [CallerMemberName] string member = null) { Provider?.Stop(reference, tag, path, member); } internal static IDisposable StartNew(string tag = null, [CallerFilePath] string path = null, [CallerMemberName] string member = null) { return new DisposablePerformanceReference(tag, path, member); } class DisposablePerformanceReference : IDisposable { string _reference; string _tag; string _path; string _member; public DisposablePerformanceReference(string tag, string path, string member) { _tag = tag; _path = path; _member = member; Start(out string reference, _tag, _path, _member); _reference = reference; } public void Dispose() { Stop(_reference, _tag, _path, _member); } } } }