diff --git a/Content.Benchmarks/RaiseEventBenchmark.cs b/Content.Benchmarks/RaiseEventBenchmark.cs index 99e032d0b5..b8c6bd7d47 100644 --- a/Content.Benchmarks/RaiseEventBenchmark.cs +++ b/Content.Benchmarks/RaiseEventBenchmark.cs @@ -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().NetID!.Value; _sys.EvSubs = bus.GetNetCompEventHandlers(); + + var id2 = entMan.Spawn(); + entMan.AddComponent(id2); + entMan.AddComponent(id2); + _sys.Ent2Comps = id2; + + var id4 = entMan.Spawn(); + entMan.AddComponent(id4); + entMan.AddComponent(id4); + entMan.AddComponent(id4); + entMan.AddComponent(id4); + _sys.Ent4Comps = id4; + + var id8 = entMan.Spawn(); + entMan.AddComponent(id8); + entMan.AddComponent(id8); + entMan.AddComponent(id8); + entMan.AddComponent(id8); + entMan.AddComponent(id8); + entMan.AddComponent(id8); + entMan.AddComponent(id8); + entMan.AddComponent(id8); + _sys.Ent8Comps = id8; + + var id16 = entMan.Spawn(); + entMan.AddComponent(id16); + entMan.AddComponent(id16); + entMan.AddComponent(id16); + entMan.AddComponent(id16); + entMan.AddComponent(id16); + entMan.AddComponent(id16); + entMan.AddComponent(id16); + entMan.AddComponent(id16); + entMan.AddComponent(id16); + entMan.AddComponent(id16); + entMan.AddComponent(id16); + entMan.AddComponent(id16); + entMan.AddComponent(id16); + entMan.AddComponent(id16); + entMan.AddComponent(id16); + entMan.AddComponent(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 Ent; public Entity 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(OnEvent); + SubscribeLocalEvent(OnEvent); + SubscribeLocalEvent(OnEvent); + SubscribeLocalEvent(OnEvent); + SubscribeLocalEvent(OnEvent); + SubscribeLocalEvent(OnEvent); + SubscribeLocalEvent(OnEvent); + SubscribeLocalEvent(OnEvent); + SubscribeLocalEvent(OnEvent); + SubscribeLocalEvent(OnEvent); + SubscribeLocalEvent(OnEvent); + SubscribeLocalEvent(OnEvent); + SubscribeLocalEvent(OnEvent); + SubscribeLocalEvent(OnEvent); + SubscribeLocalEvent(OnEvent); + SubscribeLocalEvent(OnEvent); + SubscribeLocalEvent(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(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; } }