2023-03-17 23:06:47 -04:00
|
|
|
// Copyright Epic Games, Inc. All Rights Reserved.
|
|
|
|
|
|
|
|
|
|
#pragma autortfm
|
|
|
|
|
|
2023-03-20 17:13:55 -04:00
|
|
|
#include "Catch2Includes.h"
|
2023-03-17 23:06:47 -04:00
|
|
|
#include <AutoRTFM/AutoRTFM.h>
|
|
|
|
|
#include <thread>
|
|
|
|
|
#include <vector>
|
|
|
|
|
|
|
|
|
|
struct MyStruct final {
|
|
|
|
|
uint8_t u8;
|
|
|
|
|
uint64_t u64;
|
|
|
|
|
|
|
|
|
|
void DoSomething() {
|
|
|
|
|
u8++;
|
|
|
|
|
u64++;
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
TEST_CASE("benchmarks.transaction_cost")
|
|
|
|
|
{
|
|
|
|
|
#if defined(NDEBUG)
|
|
|
|
|
auto Sizes = {1, 100, 1000, 10000};
|
|
|
|
|
#else
|
|
|
|
|
auto Sizes = {1, 100};
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
for (const unsigned Size : Sizes)
|
|
|
|
|
{
|
|
|
|
|
std::vector<MyStruct> Datas(Size);
|
|
|
|
|
|
|
|
|
|
BENCHMARK("open " + std::to_string(Size))
|
|
|
|
|
{
|
|
|
|
|
for (unsigned i = 0; i < Size; i++)
|
|
|
|
|
{
|
|
|
|
|
Datas[i].DoSomething();
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
BENCHMARK("one transaction " + std::to_string(Size))
|
|
|
|
|
{
|
|
|
|
|
AutoRTFM::Transact([&] ()
|
|
|
|
|
{
|
|
|
|
|
for (unsigned i = 0; i < Size; i++)
|
|
|
|
|
{
|
|
|
|
|
Datas[i].DoSomething();
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
BENCHMARK("many transactions " + std::to_string(Size))
|
|
|
|
|
{
|
|
|
|
|
for (unsigned i = 0; i < Size; i++)
|
|
|
|
|
{
|
|
|
|
|
AutoRTFM::Transact([&] ()
|
|
|
|
|
{
|
|
|
|
|
Datas[i].DoSomething();
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
}
|