MapLoadBenchmark.cs 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Threading.Tasks;
  5. using BenchmarkDotNet.Attributes;
  6. using Content.IntegrationTests;
  7. using Content.IntegrationTests.Pair;
  8. using Content.Server.Maps;
  9. using Robust.Shared;
  10. using Robust.Shared.Analyzers;
  11. using Robust.Shared.EntitySerialization.Systems;
  12. using Robust.Shared.GameObjects;
  13. using Robust.Shared.Map;
  14. using Robust.Shared.Prototypes;
  15. using Robust.Shared.Utility;
  16. namespace Content.Benchmarks;
  17. [Virtual]
  18. public class MapLoadBenchmark
  19. {
  20. private TestPair _pair = default!;
  21. private MapLoaderSystem _mapLoader = default!;
  22. private SharedMapSystem _mapSys = default!;
  23. [GlobalSetup]
  24. public void Setup()
  25. {
  26. ProgramShared.PathOffset = "../../../../";
  27. PoolManager.Startup();
  28. _pair = PoolManager.GetServerClient().GetAwaiter().GetResult();
  29. var server = _pair.Server;
  30. Paths = server.ResolveDependency<IPrototypeManager>()
  31. .EnumeratePrototypes<GameMapPrototype>()
  32. .ToDictionary(x => x.ID, x => x.MapPath.ToString());
  33. _mapLoader = server.ResolveDependency<IEntitySystemManager>().GetEntitySystem<MapLoaderSystem>();
  34. _mapSys = server.ResolveDependency<IEntitySystemManager>().GetEntitySystem<SharedMapSystem>();
  35. }
  36. [GlobalCleanup]
  37. public async Task Cleanup()
  38. {
  39. await _pair.DisposeAsync();
  40. PoolManager.Shutdown();
  41. }
  42. public static readonly string[] MapsSource = { "Nomads"};
  43. [ParamsSource(nameof(MapsSource))]
  44. public string Map;
  45. public Dictionary<string, string> Paths;
  46. private MapId _mapId;
  47. [Benchmark]
  48. public async Task LoadMap()
  49. {
  50. var mapPath = new ResPath(Paths[Map]);
  51. var server = _pair.Server;
  52. await server.WaitPost(() =>
  53. {
  54. var success = _mapLoader.TryLoadMap(mapPath, out var map, out _);
  55. if (!success)
  56. throw new Exception("Map load failed");
  57. _mapId = map.Value.Comp.MapId;
  58. });
  59. }
  60. [IterationCleanup]
  61. public void IterationCleanup()
  62. {
  63. var server = _pair.Server;
  64. server.WaitPost(() => _mapSys.DeleteMap(_mapId))
  65. .Wait();
  66. }
  67. }