1
0

EntityManagerGetAllComponents.cs 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. using BenchmarkDotNet.Attributes;
  2. using Moq;
  3. using Robust.Shared.Analyzers;
  4. using Robust.Shared.Exceptions;
  5. using Robust.Shared.GameObjects;
  6. using Robust.Shared.IoC;
  7. using Robust.Shared.Log;
  8. using Robust.Shared.Map;
  9. using Robust.Shared.Reflection;
  10. namespace Content.Benchmarks
  11. {
  12. [Virtual]
  13. public partial class EntityManagerGetAllComponents
  14. {
  15. private IEntityManager _entityManager;
  16. [Params(5000)] public int N { get; set; }
  17. public static void TestRun()
  18. {
  19. var x = new EntityManagerGetAllComponents
  20. {
  21. N = 500
  22. };
  23. x.Setup();
  24. x.Run();
  25. }
  26. [GlobalSetup]
  27. public void Setup()
  28. {
  29. // Initialize component manager.
  30. IoCManager.InitThread();
  31. IoCManager.Register<IEntityManager, EntityManager>();
  32. IoCManager.Register<IRuntimeLog, RuntimeLog>();
  33. IoCManager.Register<ILogManager, LogManager>();
  34. IoCManager.Register<IDynamicTypeFactory, DynamicTypeFactory>();
  35. IoCManager.Register<IEntitySystemManager, EntitySystemManager>();
  36. IoCManager.RegisterInstance<IReflectionManager>(new Mock<IReflectionManager>().Object);
  37. var dummyReg = new ComponentRegistration(
  38. "Dummy",
  39. typeof(DummyComponent),
  40. CompIdx.Index<DummyComponent>());
  41. var componentFactory = new Mock<IComponentFactory>();
  42. componentFactory.Setup(p => p.GetComponent<DummyComponent>()).Returns(new DummyComponent());
  43. componentFactory.Setup(m => m.GetIndex(typeof(DummyComponent))).Returns(CompIdx.Index<DummyComponent>());
  44. componentFactory.Setup(p => p.GetRegistration(It.IsAny<DummyComponent>())).Returns(dummyReg);
  45. componentFactory.Setup(p => p.GetAllRegistrations()).Returns(new[] { dummyReg });
  46. componentFactory.Setup(p => p.GetAllRefTypes()).Returns(new[] { CompIdx.Index<DummyComponent>() });
  47. IoCManager.RegisterInstance<IComponentFactory>(componentFactory.Object);
  48. IoCManager.BuildGraph();
  49. _entityManager = IoCManager.Resolve<IEntityManager>();
  50. _entityManager.Initialize();
  51. // Initialize N entities with one component.
  52. for (var i = 0; i < N; i++)
  53. {
  54. var entity = _entityManager.SpawnEntity(null, EntityCoordinates.Invalid);
  55. _entityManager.AddComponent<DummyComponent>(entity);
  56. }
  57. }
  58. [Benchmark]
  59. public int Run()
  60. {
  61. var count = 0;
  62. foreach (var _ in _entityManager.EntityQuery<DummyComponent>(true))
  63. {
  64. count += 1;
  65. }
  66. return count;
  67. }
  68. [Benchmark]
  69. public int Noop()
  70. {
  71. var count = 0;
  72. _entityManager.TryGetComponent(default, out DummyComponent _);
  73. return count;
  74. }
  75. private sealed partial class DummyComponent : Component
  76. {
  77. }
  78. }
  79. }