mirror of
https://github.com/space-syndicate/space-station-14.git
synced 2026-10-09 10:21:18 +03:00
Add benchmarks for raising local events with 2, 4, 8, and 16 subscribers (#44595)
This commit is contained in:
parent
a087deac1f
commit
139a8c1aa1
1 changed files with 168 additions and 6 deletions
|
|
@ -12,7 +12,7 @@ using Robust.Shared.GameObjects;
|
|||
namespace Content.Benchmarks;
|
||||
|
||||
[Virtual]
|
||||
public class RaiseEventBenchmark
|
||||
public partial class RaiseEventBenchmark
|
||||
{
|
||||
private TestPair _pair = default!;
|
||||
private BenchSystem _sys = default!;
|
||||
|
|
@ -35,6 +35,48 @@ public class RaiseEventBenchmark
|
|||
_sys.Ent2 = new(_sys.Ent.Owner, _sys.Ent.Comp);
|
||||
_sys.NetId = fact.GetRegistration<TransformComponent>().NetID!.Value;
|
||||
_sys.EvSubs = bus.GetNetCompEventHandlers<BenchSystem.BenchEv>();
|
||||
|
||||
var id2 = entMan.Spawn();
|
||||
entMan.AddComponent<BenchSystem.Bench1Component>(id2);
|
||||
entMan.AddComponent<BenchSystem.Bench2Component>(id2);
|
||||
_sys.Ent2Comps = id2;
|
||||
|
||||
var id4 = entMan.Spawn();
|
||||
entMan.AddComponent<BenchSystem.Bench1Component>(id4);
|
||||
entMan.AddComponent<BenchSystem.Bench2Component>(id4);
|
||||
entMan.AddComponent<BenchSystem.Bench3Component>(id4);
|
||||
entMan.AddComponent<BenchSystem.Bench4Component>(id4);
|
||||
_sys.Ent4Comps = id4;
|
||||
|
||||
var id8 = entMan.Spawn();
|
||||
entMan.AddComponent<BenchSystem.Bench1Component>(id8);
|
||||
entMan.AddComponent<BenchSystem.Bench2Component>(id8);
|
||||
entMan.AddComponent<BenchSystem.Bench3Component>(id8);
|
||||
entMan.AddComponent<BenchSystem.Bench4Component>(id8);
|
||||
entMan.AddComponent<BenchSystem.Bench5Component>(id8);
|
||||
entMan.AddComponent<BenchSystem.Bench6Component>(id8);
|
||||
entMan.AddComponent<BenchSystem.Bench7Component>(id8);
|
||||
entMan.AddComponent<BenchSystem.Bench8Component>(id8);
|
||||
_sys.Ent8Comps = id8;
|
||||
|
||||
var id16 = entMan.Spawn();
|
||||
entMan.AddComponent<BenchSystem.Bench1Component>(id16);
|
||||
entMan.AddComponent<BenchSystem.Bench2Component>(id16);
|
||||
entMan.AddComponent<BenchSystem.Bench3Component>(id16);
|
||||
entMan.AddComponent<BenchSystem.Bench4Component>(id16);
|
||||
entMan.AddComponent<BenchSystem.Bench5Component>(id16);
|
||||
entMan.AddComponent<BenchSystem.Bench6Component>(id16);
|
||||
entMan.AddComponent<BenchSystem.Bench7Component>(id16);
|
||||
entMan.AddComponent<BenchSystem.Bench8Component>(id16);
|
||||
entMan.AddComponent<BenchSystem.Bench9Component>(id16);
|
||||
entMan.AddComponent<BenchSystem.Bench10Component>(id16);
|
||||
entMan.AddComponent<BenchSystem.Bench11Component>(id16);
|
||||
entMan.AddComponent<BenchSystem.Bench12Component>(id16);
|
||||
entMan.AddComponent<BenchSystem.Bench13Component>(id16);
|
||||
entMan.AddComponent<BenchSystem.Bench14Component>(id16);
|
||||
entMan.AddComponent<BenchSystem.Bench15Component>(id16);
|
||||
entMan.AddComponent<BenchSystem.Bench16Component>(id16);
|
||||
_sys.Ent16Comps = id16;
|
||||
})
|
||||
.GetAwaiter()
|
||||
.GetResult();
|
||||
|
|
@ -48,9 +90,33 @@ public class RaiseEventBenchmark
|
|||
}
|
||||
|
||||
[Benchmark(Baseline = true)]
|
||||
public int RaiseEvent()
|
||||
public int RaiseEvent1()
|
||||
{
|
||||
return _sys.RaiseEvent();
|
||||
return _sys.RaiseEvent1();
|
||||
}
|
||||
|
||||
[Benchmark]
|
||||
public int RaiseEvent2()
|
||||
{
|
||||
return _sys.RaiseEvent2();
|
||||
}
|
||||
|
||||
[Benchmark]
|
||||
public int RaiseEvent4()
|
||||
{
|
||||
return _sys.RaiseEvent4();
|
||||
}
|
||||
|
||||
[Benchmark]
|
||||
public int RaiseEvent8()
|
||||
{
|
||||
return _sys.RaiseEvent8();
|
||||
}
|
||||
|
||||
[Benchmark]
|
||||
public int RaiseEvent16()
|
||||
{
|
||||
return _sys.RaiseEvent16();
|
||||
}
|
||||
|
||||
[Benchmark]
|
||||
|
|
@ -77,10 +143,14 @@ public class RaiseEventBenchmark
|
|||
return _sys.CSharpEvent();
|
||||
}
|
||||
|
||||
public sealed class BenchSystem : EntitySystem
|
||||
public sealed partial class BenchSystem : EntitySystem
|
||||
{
|
||||
public Entity<TransformComponent> Ent;
|
||||
public Entity<IComponent> Ent2;
|
||||
public EntityUid Ent2Comps;
|
||||
public EntityUid Ent4Comps;
|
||||
public EntityUid Ent8Comps;
|
||||
public EntityUid Ent16Comps;
|
||||
|
||||
public delegate void EntityEventHandler(EntityUid uid, TransformComponent comp, ref BenchEv ev);
|
||||
|
||||
|
|
@ -92,16 +162,60 @@ public class RaiseEventBenchmark
|
|||
{
|
||||
base.Initialize();
|
||||
SubscribeLocalEvent<TransformComponent, BenchEv>(OnEvent);
|
||||
SubscribeLocalEvent<Bench1Component, BenchEv>(OnEvent);
|
||||
SubscribeLocalEvent<Bench2Component, BenchEv>(OnEvent);
|
||||
SubscribeLocalEvent<Bench3Component, BenchEv>(OnEvent);
|
||||
SubscribeLocalEvent<Bench4Component, BenchEv>(OnEvent);
|
||||
SubscribeLocalEvent<Bench5Component, BenchEv>(OnEvent);
|
||||
SubscribeLocalEvent<Bench6Component, BenchEv>(OnEvent);
|
||||
SubscribeLocalEvent<Bench7Component, BenchEv>(OnEvent);
|
||||
SubscribeLocalEvent<Bench8Component, BenchEv>(OnEvent);
|
||||
SubscribeLocalEvent<Bench9Component, BenchEv>(OnEvent);
|
||||
SubscribeLocalEvent<Bench10Component, BenchEv>(OnEvent);
|
||||
SubscribeLocalEvent<Bench11Component, BenchEv>(OnEvent);
|
||||
SubscribeLocalEvent<Bench12Component, BenchEv>(OnEvent);
|
||||
SubscribeLocalEvent<Bench13Component, BenchEv>(OnEvent);
|
||||
SubscribeLocalEvent<Bench14Component, BenchEv>(OnEvent);
|
||||
SubscribeLocalEvent<Bench15Component, BenchEv>(OnEvent);
|
||||
SubscribeLocalEvent<Bench16Component, BenchEv>(OnEvent);
|
||||
OnCSharpEvent += OnEvent;
|
||||
}
|
||||
|
||||
public int RaiseEvent()
|
||||
public int RaiseEvent1()
|
||||
{
|
||||
var ev = new BenchEv();
|
||||
RaiseLocalEvent(Ent.Owner, ref ev);
|
||||
return ev.N;
|
||||
}
|
||||
|
||||
public int RaiseEvent2()
|
||||
{
|
||||
var ev = new BenchEv();
|
||||
RaiseLocalEvent(Ent2Comps, ref ev);
|
||||
return ev.N;
|
||||
}
|
||||
|
||||
public int RaiseEvent4()
|
||||
{
|
||||
var ev = new BenchEv();
|
||||
RaiseLocalEvent(Ent4Comps, ref ev);
|
||||
return ev.N;
|
||||
}
|
||||
|
||||
public int RaiseEvent8()
|
||||
{
|
||||
var ev = new BenchEv();
|
||||
RaiseLocalEvent(Ent8Comps, ref ev);
|
||||
return ev.N;
|
||||
}
|
||||
|
||||
public int RaiseEvent16()
|
||||
{
|
||||
var ev = new BenchEv();
|
||||
RaiseLocalEvent(Ent16Comps, ref ev);
|
||||
return ev.N;
|
||||
}
|
||||
|
||||
public int RaiseCompEvent()
|
||||
{
|
||||
var ev = new BenchEv();
|
||||
|
|
@ -134,7 +248,7 @@ public class RaiseEventBenchmark
|
|||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.NoInlining)]
|
||||
private void OnEvent(EntityUid uid, TransformComponent component, ref BenchEv args)
|
||||
private void OnEvent<T>(EntityUid uid, T component, ref BenchEv args)
|
||||
{
|
||||
args.N += uid.Id;
|
||||
}
|
||||
|
|
@ -145,5 +259,53 @@ public class RaiseEventBenchmark
|
|||
{
|
||||
public int N;
|
||||
}
|
||||
|
||||
[RegisterComponent]
|
||||
public sealed partial class Bench1Component : Component;
|
||||
|
||||
[RegisterComponent]
|
||||
public sealed partial class Bench2Component : Component;
|
||||
|
||||
[RegisterComponent]
|
||||
public sealed partial class Bench3Component : Component;
|
||||
|
||||
[RegisterComponent]
|
||||
public sealed partial class Bench4Component : Component;
|
||||
|
||||
[RegisterComponent]
|
||||
public sealed partial class Bench5Component : Component;
|
||||
|
||||
[RegisterComponent]
|
||||
public sealed partial class Bench6Component : Component;
|
||||
|
||||
[RegisterComponent]
|
||||
public sealed partial class Bench7Component : Component;
|
||||
|
||||
[RegisterComponent]
|
||||
public sealed partial class Bench8Component : Component;
|
||||
|
||||
[RegisterComponent]
|
||||
public sealed partial class Bench9Component : Component;
|
||||
|
||||
[RegisterComponent]
|
||||
public sealed partial class Bench10Component : Component;
|
||||
|
||||
[RegisterComponent]
|
||||
public sealed partial class Bench11Component : Component;
|
||||
|
||||
[RegisterComponent]
|
||||
public sealed partial class Bench12Component : Component;
|
||||
|
||||
[RegisterComponent]
|
||||
public sealed partial class Bench13Component : Component;
|
||||
|
||||
[RegisterComponent]
|
||||
public sealed partial class Bench14Component : Component;
|
||||
|
||||
[RegisterComponent]
|
||||
public sealed partial class Bench15Component : Component;
|
||||
|
||||
[RegisterComponent]
|
||||
public sealed partial class Bench16Component : Component;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue