DomPathBenchmarks.cpp 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  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. #include <Tests/DOM/DomFixtures.h>
  9. #include <AzCore/DOM/DomPath.h>
  10. namespace AZ::Dom::Benchmark
  11. {
  12. using DomPathBenchmark = Tests::DomBenchmarkFixture;
  13. BENCHMARK_DEFINE_F(DomPathBenchmark, DomPath_Concatenate_InPlace)(benchmark::State& state)
  14. {
  15. AZ::Name entry1("entry1");
  16. AZ::Name entry2("entry2");
  17. PathEntry end;
  18. end.SetEndOfArray();
  19. for ([[maybe_unused]] auto _ : state)
  20. {
  21. Path p;
  22. p /= entry1;
  23. p /= entry2;
  24. p /= 0;
  25. p /= end;
  26. }
  27. state.SetItemsProcessed(4 * state.iterations());
  28. }
  29. BENCHMARK_REGISTER_F(DomPathBenchmark, DomPath_Concatenate_InPlace);
  30. BENCHMARK_DEFINE_F(DomPathBenchmark, DomPath_Concatenate_Copy)(benchmark::State& state)
  31. {
  32. AZ::Name entry1("entry1");
  33. AZ::Name entry2("entry2");
  34. PathEntry end;
  35. end.SetEndOfArray();
  36. for ([[maybe_unused]] auto _ : state)
  37. {
  38. Path p = Path() / entry1 / entry2 / 0 / end;
  39. }
  40. state.SetItemsProcessed(4 * state.iterations());
  41. }
  42. BENCHMARK_REGISTER_F(DomPathBenchmark, DomPath_Concatenate_Copy);
  43. BENCHMARK_DEFINE_F(DomPathBenchmark, DomPath_ToString)(benchmark::State& state)
  44. {
  45. Path p("/path/with/multiple/0/different/components/65536/999/-");
  46. AZStd::string s;
  47. s.resize_no_construct(p.GetStringLength());
  48. for ([[maybe_unused]] auto _ : state)
  49. {
  50. p.GetStringLength();
  51. p.FormatString(s.data(), s.size());
  52. }
  53. state.SetBytesProcessed(s.size() * state.iterations());
  54. }
  55. BENCHMARK_REGISTER_F(DomPathBenchmark, DomPath_ToString);
  56. BENCHMARK_DEFINE_F(DomPathBenchmark, DomPath_FromString)(benchmark::State& state)
  57. {
  58. AZStd::string pathString = "/path/with/multiple/0/different/components/including-long-strings-like-this/65536/999/-";
  59. for ([[maybe_unused]] auto _ : state)
  60. {
  61. Path p(pathString);
  62. benchmark::DoNotOptimize(p);
  63. }
  64. state.SetBytesProcessed(pathString.size() * state.iterations());
  65. }
  66. BENCHMARK_REGISTER_F(DomPathBenchmark, DomPath_FromString);
  67. BENCHMARK_DEFINE_F(DomPathBenchmark, DomPathEntry_IsEndOfArray)(benchmark::State& state)
  68. {
  69. PathEntry name("name");
  70. PathEntry index(0);
  71. PathEntry endOfArray;
  72. endOfArray.SetEndOfArray();
  73. for ([[maybe_unused]] auto _ : state)
  74. {
  75. name.IsEndOfArray();
  76. index.IsEndOfArray();
  77. endOfArray.IsEndOfArray();
  78. }
  79. state.SetItemsProcessed(3 * state.iterations());
  80. }
  81. BENCHMARK_REGISTER_F(DomPathBenchmark, DomPathEntry_IsEndOfArray);
  82. BENCHMARK_DEFINE_F(DomPathBenchmark, DomPathEntry_Comparison)(benchmark::State& state)
  83. {
  84. PathEntry name("name");
  85. PathEntry index(0);
  86. PathEntry endOfArray;
  87. endOfArray.SetEndOfArray();
  88. for ([[maybe_unused]] auto _ : state)
  89. {
  90. benchmark::DoNotOptimize(name == name);
  91. benchmark::DoNotOptimize(name == index);
  92. benchmark::DoNotOptimize(name == endOfArray);
  93. benchmark::DoNotOptimize(index == index);
  94. benchmark::DoNotOptimize(index == endOfArray);
  95. benchmark::DoNotOptimize(endOfArray == endOfArray);
  96. }
  97. state.SetItemsProcessed(6 * state.iterations());
  98. }
  99. BENCHMARK_REGISTER_F(DomPathBenchmark, DomPathEntry_Comparison);
  100. }