Avoid allocation in ScopedTimer call

This commit is contained in:
wreng 2024-02-18 19:29:54 +03:00 committed by Ikpil
parent 01b3bcf771
commit 3158dfc29c
1 changed files with 20 additions and 2 deletions

View File

@ -27,6 +27,24 @@ namespace DotRecast.Detour.Crowd
{ {
public class DtCrowdTelemetry public class DtCrowdTelemetry
{ {
public readonly struct DisposableHandle : IDisposable
{
private readonly DtCrowdTimerLabel _label;
private readonly DtCrowdTelemetry _telemetry;
public DisposableHandle(DtCrowdTelemetry telemetry, DtCrowdTimerLabel label)
{
_telemetry = telemetry;
_label = label;
}
public void Dispose()
{
_telemetry.Stop(_label);
}
}
public const int TIMING_SAMPLES = 10; public const int TIMING_SAMPLES = 10;
private float _maxTimeToEnqueueRequest; private float _maxTimeToEnqueueRequest;
private float _maxTimeToFindPath; private float _maxTimeToFindPath;
@ -69,10 +87,10 @@ namespace DotRecast.Detour.Crowd
_maxTimeToFindPath = Math.Max(_maxTimeToFindPath, time); _maxTimeToFindPath = Math.Max(_maxTimeToFindPath, time);
} }
public IDisposable ScopedTimer(DtCrowdTimerLabel label) public DisposableHandle ScopedTimer(DtCrowdTimerLabel label)
{ {
Start(label); Start(label);
return new RcAnonymousDisposable(() => Stop(label)); return new DisposableHandle(this, label);
} }
private void Start(DtCrowdTimerLabel name) private void Start(DtCrowdTimerLabel name)