SingleInstanceMultipleEntityBenchmarks.cpp 3.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. /*
  2. * Copyright (c) Contributors to the Open 3D Engine Project.
  3. * For complete copyright and license terms please see the LICENSE at the root of this distribution.
  4. *
  5. * SPDX-License-Identifier: Apache-2.0 OR MIT
  6. *
  7. */
  8. #if defined(HAVE_BENCHMARK)
  9. #include <Prefab/Benchmark/Propagation/SingleInstanceMultipleEntityBenchmarks.h>
  10. #define REGISTER_MULTIPLE_ENTITY_BENCHMARK(BaseClass, Method) \
  11. BENCHMARK_REGISTER_F(BaseClass, Method) \
  12. ->RangeMultiplier(10) \
  13. ->Range(100, 10000) \
  14. ->Unit(benchmark::kMillisecond);
  15. namespace Benchmark
  16. {
  17. using namespace AzToolsFramework::Prefab;
  18. void SingleInstanceMultipleEntityBenchmarks::SetupHarness(const benchmark::State& state)
  19. {
  20. BM_Prefab::SetupHarness(state);
  21. CreateFakePaths(1);
  22. const auto& templatePath = m_paths.front();
  23. const unsigned int numEntities = static_cast<unsigned int>(state.range());
  24. AZStd::vector<AZ::Entity*> entities;
  25. for (unsigned int i = 1; i < numEntities; i++)
  26. {
  27. entities.emplace_back(CreateEntity("Entity"));
  28. }
  29. m_entityToModify = CreateEntity("Entity", AZ::EntityId());
  30. entities.emplace_back(m_entityToModify);
  31. m_instanceCreated = m_prefabSystemComponent->CreatePrefab(entities, {}, templatePath);
  32. TemplateId templateToInstantiateId = m_instanceCreated->GetTemplateId();
  33. m_instanceToModify = m_instanceCreated.get();
  34. // We need 2 prefab instances: One to make the original change to; And one to propagate that change to.
  35. m_instanceToUseForPropagation = m_prefabSystemComponent->InstantiatePrefab(templateToInstantiateId);
  36. }
  37. void SingleInstanceMultipleEntityBenchmarks::TeardownHarness(const benchmark::State& state)
  38. {
  39. m_instanceCreated.reset();
  40. m_instanceToUseForPropagation.reset();
  41. BM_Prefab::TeardownHarness(state);
  42. }
  43. BENCHMARK_DEFINE_F(SingleInstanceMultipleEntityBenchmarks, PropagateUpdateComponentChange)(benchmark::State& state)
  44. {
  45. UpdateComponent(state);
  46. }
  47. REGISTER_MULTIPLE_ENTITY_BENCHMARK(SingleInstanceMultipleEntityBenchmarks, PropagateUpdateComponentChange);
  48. BENCHMARK_DEFINE_F(SingleInstanceMultipleEntityBenchmarks, PropagateAddComponentChange)(benchmark::State& state)
  49. {
  50. AddComponent(state);
  51. }
  52. REGISTER_MULTIPLE_ENTITY_BENCHMARK(SingleInstanceMultipleEntityBenchmarks, PropagateAddComponentChange);
  53. BENCHMARK_DEFINE_F(SingleInstanceMultipleEntityBenchmarks, PropagateRemoveComponentChange)(benchmark::State& state)
  54. {
  55. RemoveComponent(state);
  56. }
  57. REGISTER_MULTIPLE_ENTITY_BENCHMARK(SingleInstanceMultipleEntityBenchmarks, PropagateRemoveComponentChange);
  58. BENCHMARK_DEFINE_F(SingleInstanceMultipleEntityBenchmarks, PropagateAddEntityChange)(benchmark::State& state)
  59. {
  60. AddEntity(state);
  61. }
  62. REGISTER_MULTIPLE_ENTITY_BENCHMARK(SingleInstanceMultipleEntityBenchmarks, PropagateAddEntityChange);
  63. BENCHMARK_DEFINE_F(SingleInstanceMultipleEntityBenchmarks, PropagateRemoveEntityChange)(benchmark::State& state)
  64. {
  65. RemoveEntity(state);
  66. }
  67. REGISTER_MULTIPLE_ENTITY_BENCHMARK(SingleInstanceMultipleEntityBenchmarks, PropagateRemoveEntityChange);
  68. } // namespace Benchmark
  69. #endif