zengine-old/engine/3rdparty/zlib/test/refl_01.cpp

47 lines
1.2 KiB
C++
Raw Normal View History

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;
2024-04-19 22:02:27 +08:00
constexpr int smeta = sizeof(vec3_Meta);
constexpr int scls = sizeof(decltype(*cls));
2024-04-16 16:17:13 +08:00
auto ov = cls->New((void*)&v);
constexpr Name func("norm");
void TestRefl1(benchmark::State& state) {
int x = 1, y = 2;
for (auto _ : state) {
2024-04-19 22:02:27 +08:00
std::array<Any, 4> arr{&x, ov.ptr};
svector<Any> svec(&arr.front(), arr.size(), 2);
2024-04-16 16:17:13 +08:00
ov.Invoke("norm", svec);
}
}
BENCHMARK(TestRefl1);
void TestRefl2(benchmark::State& state) {
int x = 1, y = 2;
2024-04-19 22:02:27 +08:00
constexpr auto id = GetStaticFieldID<vec3_Meta>(func);
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};
svector<Any> svec(&arr.front(), arr.size(), 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-19 22:02:27 +08:00
constexpr auto id = GetStaticFieldID<vec3_Meta>(func);
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();