add DtCrowdTimerLabel

This commit is contained in:
ikpil 2023-08-04 00:17:51 +09:00
parent 71b68a4937
commit 74cbb2ee29
3 changed files with 51 additions and 23 deletions

View File

@ -444,7 +444,7 @@ namespace DotRecast.Detour.Crowd
private void CheckPathValidity(IList<DtCrowdAgent> agents, float dt)
{
using var timer = _telemetry.ScopedTimer("checkPathValidity");
using var timer = _telemetry.ScopedTimer(DtCrowdTimerLabel.CheckPathValidity);
foreach (DtCrowdAgent ag in agents)
{
@ -553,7 +553,7 @@ namespace DotRecast.Detour.Crowd
private void UpdateMoveRequest(IList<DtCrowdAgent> agents, float dt)
{
using var timer = _telemetry.ScopedTimer("updateMoveRequest");
using var timer = _telemetry.ScopedTimer(DtCrowdTimerLabel.UpdateMoveRequest);
RcSortedQueue<DtCrowdAgent> queue = new RcSortedQueue<DtCrowdAgent>((a1, a2) => a2.targetReplanTime.CompareTo(a1.targetReplanTime));
@ -666,7 +666,7 @@ namespace DotRecast.Detour.Crowd
}
// Update requests.
using (var timer2 = _telemetry.ScopedTimer("pathQueueUpdate"))
using (var timer2 = _telemetry.ScopedTimer(DtCrowdTimerLabel.PathQueueUpdate))
{
_pathQ.Update(_navMesh);
}
@ -807,7 +807,7 @@ namespace DotRecast.Detour.Crowd
private void UpdateTopologyOptimization(IList<DtCrowdAgent> agents, float dt)
{
using var timer = _telemetry.ScopedTimer("updateTopologyOptimization");
using var timer = _telemetry.ScopedTimer(DtCrowdTimerLabel.UpdateTopologyOptimization);
RcSortedQueue<DtCrowdAgent> queue = new RcSortedQueue<DtCrowdAgent>((a1, a2) => a2.topologyOptTime.CompareTo(a1.topologyOptTime));
@ -846,7 +846,7 @@ namespace DotRecast.Detour.Crowd
private void BuildProximityGrid(IList<DtCrowdAgent> agents)
{
using var timer = _telemetry.ScopedTimer("buildProximityGrid");
using var timer = _telemetry.ScopedTimer(DtCrowdTimerLabel.BuildProximityGrid);
_grid = new DtProximityGrid(_config.maxAgentRadius * 3);
@ -860,7 +860,7 @@ namespace DotRecast.Detour.Crowd
private void BuildNeighbours(IList<DtCrowdAgent> agents)
{
using var timer = _telemetry.ScopedTimer("buildNeighbours");
using var timer = _telemetry.ScopedTimer(DtCrowdTimerLabel.BuildNeighbours);
foreach (DtCrowdAgent ag in agents)
{
@ -921,7 +921,7 @@ namespace DotRecast.Detour.Crowd
private void FindCorners(IList<DtCrowdAgent> agents, DtCrowdAgentDebugInfo debug)
{
using var timer = _telemetry.ScopedTimer("findCorners");
using var timer = _telemetry.ScopedTimer(DtCrowdTimerLabel.FindCorners);
DtCrowdAgent debugAgent = debug != null ? debug.agent : null;
foreach (DtCrowdAgent ag in agents)
@ -969,7 +969,7 @@ namespace DotRecast.Detour.Crowd
private void TriggerOffMeshConnections(IList<DtCrowdAgent> agents)
{
using var timer = _telemetry.ScopedTimer("triggerOffMeshConnections");
using var timer = _telemetry.ScopedTimer(DtCrowdTimerLabel.TriggerOffMeshConnections);
foreach (DtCrowdAgent ag in agents)
{
@ -1017,7 +1017,7 @@ namespace DotRecast.Detour.Crowd
private void CalculateSteering(IList<DtCrowdAgent> agents)
{
using var timer = _telemetry.ScopedTimer("calculateSteering");
using var timer = _telemetry.ScopedTimer(DtCrowdTimerLabel.CalculateSteering);
foreach (DtCrowdAgent ag in agents)
{
@ -1114,7 +1114,7 @@ namespace DotRecast.Detour.Crowd
private void PlanVelocity(DtCrowdAgentDebugInfo debug, IList<DtCrowdAgent> agents)
{
using var timer = _telemetry.ScopedTimer("planVelocity");
using var timer = _telemetry.ScopedTimer(DtCrowdTimerLabel.PlanVelocity);
DtCrowdAgent debugAgent = debug != null ? debug.agent : null;
foreach (DtCrowdAgent ag in agents)
@ -1184,7 +1184,7 @@ namespace DotRecast.Detour.Crowd
private void Integrate(float dt, IList<DtCrowdAgent> agents)
{
using var timer = _telemetry.ScopedTimer("integrate");
using var timer = _telemetry.ScopedTimer(DtCrowdTimerLabel.Integrate);
foreach (DtCrowdAgent ag in agents)
{
@ -1199,7 +1199,7 @@ namespace DotRecast.Detour.Crowd
private void HandleCollisions(IList<DtCrowdAgent> agents)
{
using var timer = _telemetry.ScopedTimer("handleCollisions");
using var timer = _telemetry.ScopedTimer(DtCrowdTimerLabel.HandleCollisions);
for (int iter = 0; iter < 4; ++iter)
{
@ -1275,7 +1275,7 @@ namespace DotRecast.Detour.Crowd
private void MoveAgents(IList<DtCrowdAgent> agents)
{
using var timer = _telemetry.ScopedTimer("moveAgents");
using var timer = _telemetry.ScopedTimer(DtCrowdTimerLabel.MoveAgents);
foreach (DtCrowdAgent ag in agents)
{
@ -1301,7 +1301,7 @@ namespace DotRecast.Detour.Crowd
private void UpdateOffMeshConnections(IList<DtCrowdAgent> agents, float dt)
{
using var timer = _telemetry.ScopedTimer("updateOffMeshConnections");
using var timer = _telemetry.ScopedTimer(DtCrowdTimerLabel.UpdateOffMeshConnections);
foreach (DtCrowdAgent ag in agents)
{

View File

@ -20,6 +20,7 @@ using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Reflection.Emit;
using DotRecast.Core;
namespace DotRecast.Detour.Crowd
@ -30,8 +31,8 @@ namespace DotRecast.Detour.Crowd
private float _maxTimeToEnqueueRequest;
private float _maxTimeToFindPath;
private readonly Dictionary<string, long> _executionTimings = new Dictionary<string, long>();
private readonly Dictionary<string, List<long>> _executionTimingSamples = new Dictionary<string, List<long>>();
private readonly Dictionary<DtCrowdTimerLabel, long> _executionTimings = new Dictionary<DtCrowdTimerLabel, long>();
private readonly Dictionary<DtCrowdTimerLabel, List<long>> _executionTimingSamples = new Dictionary<DtCrowdTimerLabel, List<long>>();
public float MaxTimeToEnqueueRequest()
{
@ -46,7 +47,7 @@ namespace DotRecast.Detour.Crowd
public List<RcTelemetryTick> ToExecutionTimings()
{
return _executionTimings
.Select(e => new RcTelemetryTick(e.Key, e.Value))
.Select(e => new RcTelemetryTick(e.Key.Label, e.Value))
.OrderByDescending(x => x.Ticks)
.ToList();
}
@ -68,18 +69,18 @@ namespace DotRecast.Detour.Crowd
_maxTimeToFindPath = Math.Max(_maxTimeToFindPath, time);
}
public IDisposable ScopedTimer(string name)
public IDisposable ScopedTimer(DtCrowdTimerLabel label)
{
Start(name);
return new RcAnonymousDisposable(() => Stop(name));
Start(label);
return new RcAnonymousDisposable(() => Stop(label));
}
public void Start(string name)
public void Start(DtCrowdTimerLabel name)
{
_executionTimings.Add(name, RcFrequency.Ticks);
}
public void Stop(string name)
public void Stop(DtCrowdTimerLabel name)
{
long duration = RcFrequency.Ticks - _executionTimings[name];
if (!_executionTimingSamples.TryGetValue(name, out var s))

View File

@ -0,0 +1,27 @@
namespace DotRecast.Detour.Crowd
{
public class DtCrowdTimerLabel
{
public static readonly DtCrowdTimerLabel CheckPathValidity = new DtCrowdTimerLabel(nameof(CheckPathValidity));
public static readonly DtCrowdTimerLabel UpdateMoveRequest = new DtCrowdTimerLabel(nameof(UpdateMoveRequest));
public static readonly DtCrowdTimerLabel PathQueueUpdate = new DtCrowdTimerLabel(nameof(PathQueueUpdate));
public static readonly DtCrowdTimerLabel UpdateTopologyOptimization = new DtCrowdTimerLabel(nameof(UpdateTopologyOptimization));
public static readonly DtCrowdTimerLabel BuildProximityGrid = new DtCrowdTimerLabel(nameof(BuildProximityGrid));
public static readonly DtCrowdTimerLabel BuildNeighbours = new DtCrowdTimerLabel(nameof(BuildNeighbours));
public static readonly DtCrowdTimerLabel FindCorners = new DtCrowdTimerLabel(nameof(FindCorners));
public static readonly DtCrowdTimerLabel TriggerOffMeshConnections = new DtCrowdTimerLabel(nameof(TriggerOffMeshConnections));
public static readonly DtCrowdTimerLabel CalculateSteering = new DtCrowdTimerLabel(nameof(CalculateSteering));
public static readonly DtCrowdTimerLabel PlanVelocity = new DtCrowdTimerLabel(nameof(PlanVelocity));
public static readonly DtCrowdTimerLabel Integrate = new DtCrowdTimerLabel(nameof(Integrate));
public static readonly DtCrowdTimerLabel HandleCollisions = new DtCrowdTimerLabel(nameof(HandleCollisions));
public static readonly DtCrowdTimerLabel MoveAgents = new DtCrowdTimerLabel(nameof(MoveAgents));
public static readonly DtCrowdTimerLabel UpdateOffMeshConnections = new DtCrowdTimerLabel(nameof(UpdateOffMeshConnections));
public readonly string Label;
private DtCrowdTimerLabel(string labelName)
{
Label = labelName;
}
}
}