123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180 |
- /*
- * Copyright (c) Contributors to the Open 3D Engine Project.
- * For complete copyright and license terms please see the LICENSE at the root of this distribution.
- *
- * SPDX-License-Identifier: Apache-2.0 OR MIT
- *
- */
- #include <AzCore/Interface/Interface.h>
- #include <AzCore/Name/Name.h>
- #include <AzCore/Name/NameDictionary.h>
- #include <AzCore/UnitTest/TestTypes.h>
- namespace AZ::NameBenchmarks
- {
- class NameBenchmarkFixture : public UnitTest::AllocatorsBenchmarkFixture
- {
- public:
- void SetUp(const ::benchmark::State& st) override
- {
- UnitTest::AllocatorsBenchmarkFixture::SetUp(st);
- AZ::NameDictionary::Create();
- }
- void SetUp(::benchmark::State& st) override
- {
- UnitTest::AllocatorsBenchmarkFixture::SetUp(st);
- AZ::NameDictionary::Create();
- }
- void TearDown(::benchmark::State& st) override
- {
- AZ::NameDictionary::Destroy();
- UnitTest::AllocatorsBenchmarkFixture::TearDown(st);
- }
- void TearDown(const ::benchmark::State& st) override
- {
- AZ::NameDictionary::Destroy();
- UnitTest::AllocatorsBenchmarkFixture::TearDown(st);
- }
- AZ::Name NameFromCachedLiteral()
- {
- return AZ_NAME_LITERAL("test_literal");
- }
- AZ::Name NameFromUncachedLiteral()
- {
- return AZ::Name("test_literal");
- }
- };
- BENCHMARK_DEFINE_F(NameBenchmarkFixture, CreateNameCacheHit)(::benchmark::State& state)
- {
- constexpr size_t poolSize = 100;
- AZStd::vector<AZ::Name> existingNames;
- for (size_t i = 0; i < poolSize; ++i)
- {
- existingNames.emplace_back(AZStd::string::format("name%zu", i));
- }
- for ([[maybe_unused]] auto var_ : state)
- {
- for (size_t i = 0; i < poolSize; ++i)
- {
- benchmark::DoNotOptimize(AZ::Name(existingNames[i].GetStringView()));
- }
- }
- state.SetItemsProcessed(state.iterations() * poolSize);
- }
- BENCHMARK_REGISTER_F(NameBenchmarkFixture, CreateNameCacheHit);
- BENCHMARK_DEFINE_F(NameBenchmarkFixture, CreateNameCacheMiss)(::benchmark::State& state)
- {
- constexpr size_t poolSize = 100;
- AZStd::vector<AZStd::string> namesToCreate;
- for (size_t i = 0; i < poolSize; ++i)
- {
- namesToCreate.emplace_back(AZStd::string::format("name%zu", i));
- }
- for ([[maybe_unused]] auto var_ : state)
- {
- for (size_t i = 0; i < poolSize; ++i)
- {
- benchmark::DoNotOptimize(AZ::Name(namesToCreate[i]));
- }
- }
- state.SetItemsProcessed(state.iterations() * poolSize);
- }
- BENCHMARK_REGISTER_F(NameBenchmarkFixture, CreateNameCacheMiss);
- BENCHMARK_DEFINE_F(NameBenchmarkFixture, CopyName)(::benchmark::State& state)
- {
- constexpr size_t poolSize = 100;
- AZStd::vector<AZ::Name> existingNames;
- for (size_t i = 0; i < poolSize; ++i)
- {
- existingNames.emplace_back(AZStd::string::format("name%zu", i));
- }
- for ([[maybe_unused]] auto var_ : state)
- {
- for (size_t i = 0; i < poolSize; ++i)
- {
- benchmark::DoNotOptimize(AZ::Name(existingNames[i]));
- }
- }
- state.SetItemsProcessed(state.iterations() * poolSize);
- }
- BENCHMARK_REGISTER_F(NameBenchmarkFixture, CopyName);
- BENCHMARK_DEFINE_F(NameBenchmarkFixture, RetrieveName_WithNameLiteral)(::benchmark::State& state)
- {
- for ([[maybe_unused]] auto var_ : state)
- {
- benchmark::DoNotOptimize(AZ::Name(NameFromCachedLiteral()));
- }
- state.SetItemsProcessed(state.iterations());
- }
- BENCHMARK_REGISTER_F(NameBenchmarkFixture, RetrieveName_WithNameLiteral);
- BENCHMARK_DEFINE_F(NameBenchmarkFixture, RetrieveName_WithoutNameLiteral)(::benchmark::State& state)
- {
- for ([[maybe_unused]] auto var_ : state)
- {
- benchmark::DoNotOptimize(AZ::Name(NameFromUncachedLiteral()));
- }
- state.SetItemsProcessed(state.iterations());
- }
- BENCHMARK_REGISTER_F(NameBenchmarkFixture, RetrieveName_WithoutNameLiteral);
- BENCHMARK_DEFINE_F(NameBenchmarkFixture, NameCreateAndDestroy)(::benchmark::State& state)
- {
- AZStd::vector<AZ::Name> names;
- names.resize(state.range(0));
- for ([[maybe_unused]] auto var_ : state)
- {
- for (int64_t i = 0; i < state.range(0); ++i)
- {
- names[i] = (AZ::Name("not created as a literal"));
- }
- for (int64_t i = 0; i < state.range(0); ++i)
- {
- names[i] = AZ::Name();
- }
- }
- state.SetItemsProcessed(state.iterations() * state.range(0));
- }
- BENCHMARK_REGISTER_F(NameBenchmarkFixture, NameCreateAndDestroy)->Arg(10)->Arg(100)->Arg(1000);
- BENCHMARK_DEFINE_F(NameBenchmarkFixture, NameLiteralCreateAndDestroy)(::benchmark::State& state)
- {
- AZStd::vector<AZ::Name> names;
- names.resize(state.range(0));
- for ([[maybe_unused]] auto var_ : state)
- {
- for (int64_t i = 0; i < state.range(0); ++i)
- {
- names[i] = (AZ::Name::FromStringLiteral("created as a literal", AZ::Interface<AZ::NameDictionary>::Get()));
- }
- for (int64_t i = 0; i < state.range(0); ++i)
- {
- names[i] = AZ::Name();
- }
- }
- state.SetItemsProcessed(state.iterations() * state.range(0));
- }
- BENCHMARK_REGISTER_F(NameBenchmarkFixture, NameLiteralCreateAndDestroy)->Arg(10)->Arg(100)->Arg(1000);
- } // namespace AZ::NameBenchmarks
|