Add profile markers for builtin runners

This commit is contained in:
Mikhail 2023-03-27 17:58:51 +08:00
parent aa80699f5a
commit eb7f1836aa
2 changed files with 108 additions and 10 deletions

View File

@ -21,30 +21,126 @@
public sealed class EcsPreInitRunner : EcsRunner<IEcsPreInitSystem>, IEcsPreInitSystem
{
void IEcsPreInitSystem.PreInit(EcsSystems systems)
#if DEBUG
private int[] _targetIds;
#endif
public void PreInit(EcsSystems systems)
{
foreach (var item in targets) item.PreInit(systems);
#if DEBUG
for (int i = 0; i < targets.Length; i++)
{
int id = _targetIds[i];
EcsDebug.ProfileMarkBegin(id);
targets[i].PreInit(systems);
EcsDebug.ProfileMarkEnd(id);
}
#else
foreach (var item in targets) item.PreInit(systems);
#endif
}
#if DEBUG
protected override void OnSetup()
{
_targetIds = new int[targets.Length];
for (int i = 0; i < targets.Length; i++)
{
_targetIds[i] = EcsDebug.RegisterMark($"EcsRunner.{targets[i].GetType().Name}.{nameof(PreInit)}");
}
}
#endif
}
public sealed class EcsInitRunner : EcsRunner<IEcsInitSystem>, IEcsInitSystem
{
void IEcsInitSystem.Init(EcsSystems systems)
#if DEBUG
private int[] _targetIds;
#endif
public void Init(EcsSystems systems)
{
foreach (var item in targets) item.Init(systems);
#if DEBUG
for (int i = 0; i < targets.Length; i++)
{
int id = _targetIds[i];
EcsDebug.ProfileMarkBegin(id);
targets[i].Init(systems);
EcsDebug.ProfileMarkEnd(id);
}
#else
foreach (var item in targets) item.Init(systems);
#endif
}
#if DEBUG
protected override void OnSetup()
{
_targetIds = new int[targets.Length];
for (int i = 0; i < targets.Length; i++)
{
_targetIds[i] = EcsDebug.RegisterMark($"EcsRunner.{targets[i].GetType().Name}.{nameof(Init)}");
}
}
#endif
}
public sealed class EcsRunRunner : EcsRunner<IEcsRunSystem>, IEcsRunSystem
{
void IEcsRunSystem.Run(EcsSystems systems)
#if DEBUG
private int[] _targetIds;
#endif
public void Run(EcsSystems systems)
{
foreach (var item in targets) item.Run(systems);
#if DEBUG
for (int i = 0; i < targets.Length; i++)
{
int id = _targetIds[i];
EcsDebug.ProfileMarkBegin(id);
targets[i].Run(systems);
EcsDebug.ProfileMarkEnd(id);
}
#else
foreach (var item in targets) item.Run(systems);
#endif
}
#if DEBUG
protected override void OnSetup()
{
_targetIds = new int[targets.Length];
for (int i = 0; i < targets.Length; i++)
{
_targetIds[i] = EcsDebug.RegisterMark($"EcsRunner.{targets[i].GetType().Name}.{nameof(Run)}");
}
}
#endif
}
public sealed class EcsDestroyRunner : EcsRunner<IEcsDestroySystem>, IEcsDestroySystem
{
void IEcsDestroySystem.Destroy(EcsSystems systems)
#if DEBUG
private int[] _targetIds;
#endif
public void Destroy(EcsSystems systems)
{
foreach (var item in targets) item.Destroy(systems);
#if DEBUG
for (int i = 0; i < targets.Length; i++)
{
int id = _targetIds[i];
EcsDebug.ProfileMarkBegin(id);
targets[i].Destroy(systems);
EcsDebug.ProfileMarkEnd(id);
}
#else
foreach (var item in targets) item.Destroy(systems);
#endif
}
#if DEBUG
protected override void OnSetup()
{
_targetIds = new int[targets.Length];
for (int i = 0; i < targets.Length; i++)
{
_targetIds[i] = EcsDebug.RegisterMark($"EcsRunner.{targets[i].GetType().Name}.{nameof(Destroy)}");
}
}
#endif
}
}

View File

@ -1,7 +1,7 @@
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Runtime.CompilerServices;
namespace DCFApixels.DragonECS
{
@ -11,13 +11,16 @@ namespace DCFApixels.DragonECS
public static void Set(DebugService service) => DebugService.Set(service);
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static void Print(object v) => DebugService.Instance.Print(v);
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static void Print(string tag, object v)
{
#if !DISABLE_ECS_DEBUG
DebugService.Instance.Print(tag, v);
#endif
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static int RegisterMark(string name)
{
#if !DISABLE_ECS_DEBUG
@ -26,18 +29,21 @@ namespace DCFApixels.DragonECS
return 0;
#endif
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static void DeleteMark(string name)
{
#if !DISABLE_ECS_DEBUG
DebugService.Instance.DeleteMark(name);
#endif
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static void ProfileMarkBegin(int id)
{
#if !DISABLE_ECS_DEBUG
DebugService.Instance.ProfileMarkBegin(id);
#endif
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static double ProfileMarkEnd(int id)
{
#if !DISABLE_ECS_DEBUG
@ -71,17 +77,15 @@ namespace DCFApixels.DragonECS
OnServiceChanged(_instance);
}
public static Action<DebugService> OnServiceChanged = delegate { };
private IntDispenser _idDispenser = new IntDispenser(0);
private Dictionary<string, int> _nameIdTable = new Dictionary<string, int>();
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public void Print(object v) => Print(null, v);
public abstract void Print(string tag, object v);
public int RegisterMark(string name)
{
int id;
@ -107,8 +111,6 @@ namespace DCFApixels.DragonECS
public abstract void ProfileMarkBegin(int id);
public abstract double ProfileMarkEnd(int id);
// public abstract IEnumerable<>
}
public sealed class DefaultDebugService : DebugService