Address some more Generic Dom Value perf feedback

Signed-off-by: Nicholas Van Sickle <nvsickle@amazon.com>
This commit is contained in:
Nicholas Van Sickle
2021-12-21 15:47:42 -08:00
parent 1da99eaea0
commit 37330c43a9
6 changed files with 77 additions and 56 deletions
@@ -120,6 +120,16 @@ namespace Benchmark
AZ_Assert(result.IsSuccess(), "Failed to serialize generated JSON");
return serializedJson;
}
template <class T>
void TakeAndDiscardWithoutTimingDtor(T&& value, benchmark::State& state)
{
{
T instance = AZStd::move(value);
state.PauseTiming();
}
state.ResumeTiming();
}
};
// Helper macro for registering JSON benchmarks
@@ -148,7 +158,7 @@ namespace Benchmark
return AZ::Dom::Utils::ReadFromStringInPlace(backend, payloadCopy, visitor);
});
benchmark::DoNotOptimize(result.GetValue());
TakeAndDiscardWithoutTimingDtor(result.TakeValue(), state);
}
state.SetBytesProcessed(serializedPayload.size() * state.iterations());
@@ -172,7 +182,7 @@ namespace Benchmark
return AZ::Dom::Utils::ReadFromStringInPlace(backend, payloadCopy, visitor);
});
benchmark::DoNotOptimize(result.GetValue());
TakeAndDiscardWithoutTimingDtor(result.TakeValue(), state);
}
state.SetBytesProcessed(serializedPayload.size() * state.iterations());
@@ -192,7 +202,7 @@ namespace Benchmark
return AZ::Dom::Utils::ReadFromString(backend, serializedPayload, AZ::Dom::Lifetime::Temporary, visitor);
});
benchmark::DoNotOptimize(result.GetValue());
TakeAndDiscardWithoutTimingDtor(result.TakeValue(), state);
}
state.SetBytesProcessed(serializedPayload.size() * state.iterations());
@@ -212,7 +222,7 @@ namespace Benchmark
return AZ::Dom::Utils::ReadFromString(backend, serializedPayload, AZ::Dom::Lifetime::Temporary, visitor);
});
benchmark::DoNotOptimize(result.GetValue());
TakeAndDiscardWithoutTimingDtor(result.TakeValue(), state);
}
state.SetBytesProcessed(serializedPayload.size() * state.iterations());
@@ -228,7 +238,7 @@ namespace Benchmark
{
auto result = AZ::JsonSerializationUtils::ReadJsonString(serializedPayload);
benchmark::DoNotOptimize(result.GetValue());
TakeAndDiscardWithoutTimingDtor(result.TakeValue(), state);
}
state.SetBytesProcessed(serializedPayload.size() * state.iterations());
@@ -239,7 +249,7 @@ namespace Benchmark
{
for (auto _ : state)
{
benchmark::DoNotOptimize(GenerateDomJsonBenchmarkPayload(state.range(0), state.range(1)));
TakeAndDiscardWithoutTimingDtor(GenerateDomJsonBenchmarkPayload(state.range(0), state.range(1)), state);
}
state.SetItemsProcessed(state.range(0) * state.range(0) * state.iterations());
@@ -277,7 +287,7 @@ namespace Benchmark
{
rapidjson::Document copy;
copy.CopyFrom(original, copy.GetAllocator(), true);
benchmark::DoNotOptimize(copy);
TakeAndDiscardWithoutTimingDtor(AZStd::move(copy), state);
}
state.SetItemsProcessed(state.iterations());
@@ -294,7 +304,7 @@ namespace Benchmark
rapidjson::Document copy;
copy.CopyFrom(original, copy.GetAllocator(), true);
copy["entries"]["Key0"].PushBack(42, copy.GetAllocator());
benchmark::DoNotOptimize(copy);
TakeAndDiscardWithoutTimingDtor(AZStd::move(copy), state);
}
state.SetItemsProcessed(state.iterations());
@@ -98,13 +98,23 @@ namespace AZ::Dom::Benchmark
return root;
}
template<class T>
void TakeAndDiscardWithoutTimingDtor(T&& value, benchmark::State& state)
{
{
T instance = AZStd::move(value);
state.PauseTiming();
}
state.ResumeTiming();
}
};
BENCHMARK_DEFINE_F(DomValueBenchmark, AzDomValueMakeComplexObject)(benchmark::State& state)
{
for (auto _ : state)
{
benchmark::DoNotOptimize(GenerateDomBenchmarkPayload(state.range(0), state.range(1)));
TakeAndDiscardWithoutTimingDtor(GenerateDomBenchmarkPayload(state.range(0), state.range(1)), state);
}
state.SetItemsProcessed(state.range(0) * state.range(0) * state.iterations());
@@ -143,7 +153,7 @@ namespace AZ::Dom::Benchmark
{
Value copy = original;
copy["entries"]["Key0"].PushBack(42);
benchmark::DoNotOptimize(copy);
TakeAndDiscardWithoutTimingDtor(AZStd::move(copy), state);
}
state.SetItemsProcessed(state.iterations());
@@ -162,7 +172,7 @@ namespace AZ::Dom::Benchmark
for (auto _ : state)
{
Value copy = original.DeepCopy();
benchmark::DoNotOptimize(copy);
TakeAndDiscardWithoutTimingDtor(AZStd::move(copy), state);
}
state.SetItemsProcessed(state.iterations());