1
0

SpawnEquipDeleteBenchmark.cs 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. using System.Threading.Tasks;
  2. using BenchmarkDotNet.Attributes;
  3. using Content.IntegrationTests;
  4. using Content.IntegrationTests.Pair;
  5. using Content.Server.Station.Systems;
  6. using Content.Shared.Roles;
  7. using Robust.Shared;
  8. using Robust.Shared.Analyzers;
  9. using Robust.Shared.GameObjects;
  10. using Robust.Shared.Map;
  11. namespace Content.Benchmarks;
  12. /// <summary>
  13. /// This benchmarks spawns several humans, gives them captain equipment and then deletes them.
  14. /// This measures performance for spawning, deletion, containers, and inventory code.
  15. /// </summary>
  16. [Virtual, MemoryDiagnoser]
  17. public class SpawnEquipDeleteBenchmark
  18. {
  19. private TestPair _pair = default!;
  20. private StationSpawningSystem _spawnSys = default!;
  21. private const string Mob = "MobHuman";
  22. private StartingGearPrototype _gear = default!;
  23. private EntityUid _entity;
  24. private EntityCoordinates _coords;
  25. [Params(1, 4, 16, 64)]
  26. public int N;
  27. [GlobalSetup]
  28. public async Task SetupAsync()
  29. {
  30. ProgramShared.PathOffset = "../../../../";
  31. PoolManager.Startup();
  32. _pair = await PoolManager.GetServerClient();
  33. var server = _pair.Server;
  34. var mapData = await _pair.CreateTestMap();
  35. _coords = mapData.GridCoords;
  36. _spawnSys = server.System<StationSpawningSystem>();
  37. _gear = server.ProtoMan.Index<StartingGearPrototype>("CaptainGear");
  38. }
  39. [GlobalCleanup]
  40. public async Task Cleanup()
  41. {
  42. await _pair.DisposeAsync();
  43. PoolManager.Shutdown();
  44. }
  45. [Benchmark]
  46. public async Task SpawnDeletePlayer()
  47. {
  48. await _pair.Server.WaitPost(() =>
  49. {
  50. var server = _pair.Server;
  51. for (var i = 0; i < N; i++)
  52. {
  53. _entity = server.EntMan.SpawnAttachedTo(Mob, _coords);
  54. _spawnSys.EquipStartingGear(_entity, _gear);
  55. server.EntMan.DeleteEntity(_entity);
  56. }
  57. });
  58. }
  59. }