2024-04-11 10:13:15 +08:00
|
|
|
#include "refl/vertex.h"
|
2024-04-16 16:17:13 +08:00
|
|
|
#include <benchmark/benchmark.h>
|
|
|
|
|
auto cls = &TypeInfo<vec3>::StaticClass;
|
|
|
|
|
vec3 v;
|
|
|
|
|
auto ov = cls->New((void*)&v);
|
|
|
|
|
void TestRefl1(benchmark::State& state) {
|
|
|
|
|
int x = 1, y = 2;
|
2024-04-25 21:45:41 +08:00
|
|
|
auto f = cls->GetField(GetStaticFieldID<vec3_Meta>(FName("name")));
|
|
|
|
|
string hello;
|
|
|
|
|
ov.Get(FName("name"), hello);
|
|
|
|
|
hello = *f->data.member.value.CastTo<string*>();
|
|
|
|
|
ov.Set(FName("name"), hello);
|
|
|
|
|
constexpr auto r = StaticMemberField(&vec3::name, FName("name"), { ("hello meta")});
|
2024-04-16 16:17:13 +08:00
|
|
|
for (auto _ : state) {
|
2024-04-19 22:02:27 +08:00
|
|
|
std::array<Any, 4> arr{&x, ov.ptr};
|
2024-04-28 00:23:35 +08:00
|
|
|
svector<Any> svec(arr, 2);
|
2024-04-22 22:53:41 +08:00
|
|
|
ov.Invoke(FName("norm"), svec);
|
2024-04-16 16:17:13 +08:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
BENCHMARK(TestRefl1);
|
|
|
|
|
void TestRefl2(benchmark::State& state) {
|
|
|
|
|
int x = 1, y = 2;
|
2024-04-22 22:53:41 +08:00
|
|
|
constexpr auto id = GetStaticFieldID<vec3_Meta>(FName("norm"));
|
2024-04-16 16:17:13 +08:00
|
|
|
auto field = cls->GetField(id);
|
|
|
|
|
for (auto _ : state) {
|
2024-04-19 22:02:27 +08:00
|
|
|
std::array<Any, 4> arr{&x, ov.ptr};
|
2024-04-28 00:23:35 +08:00
|
|
|
svector<Any> svec(arr, 2);
|
2024-04-16 16:17:13 +08:00
|
|
|
field->Invoke(svec);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
BENCHMARK(TestRefl2);
|
|
|
|
|
void TestRefl3(benchmark::State& state) {
|
|
|
|
|
int x = 1, y = 2;
|
2024-04-22 22:53:41 +08:00
|
|
|
constexpr auto id = GetStaticFieldID<vec3_Meta>(FName("norm"));
|
2024-04-16 16:17:13 +08:00
|
|
|
auto field = cls->GetField(id);
|
|
|
|
|
for (auto _ : state) {
|
|
|
|
|
field->Invoke({ &x,ov.ptr, x, y });
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
BENCHMARK(TestRefl3);
|
|
|
|
|
void TestCPlusPlus(benchmark::State& state) {
|
|
|
|
|
int x = 1, y = 2;
|
|
|
|
|
for (auto _ : state) {
|
|
|
|
|
x = v.norm(x, y);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
BENCHMARK(TestCPlusPlus);
|
2024-04-15 19:53:39 +08:00
|
|
|
|
2024-04-16 16:17:13 +08:00
|
|
|
BENCHMARK_MAIN();
|