Skip to content

Commit 93645fe

Browse files
committed
Improve plotting
1 parent 9c1de61 commit 93645fe

8 files changed

Lines changed: 465 additions & 172 deletions

File tree

‎Benchmarks/benchmark_common.hpp‎

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -168,6 +168,37 @@ struct SharedObject : std::enable_shared_from_this<SharedObject>
168168
}
169169
};
170170

171+
struct Vec3Source
172+
{
173+
float x = 0.f, y = 0.f, z = 0.f;
174+
Vec3Source() = default;
175+
Vec3Source(float x_, float y_, float z_) : x(x_), y(y_), z(z_) {}
176+
};
177+
178+
struct Vec3Target
179+
{
180+
float x = 0.f, y = 0.f, z = 0.f;
181+
Vec3Target() = default;
182+
Vec3Target(float x_, float y_, float z_) : x(x_), y(y_), z(z_) {}
183+
};
184+
185+
struct ColorSource
186+
{
187+
float r = 0.f, g = 0.f, b = 0.f;
188+
ColorSource() = default;
189+
ColorSource(float r_, float g_, float b_) : r(r_), g(g_), b(b_) {}
190+
};
191+
192+
inline float sumVec3(Vec3Target v)
193+
{
194+
return v.x + v.y + v.z;
195+
}
196+
197+
inline float sumVec3Ref(const Vec3Target& v)
198+
{
199+
return v.x + v.y + v.z;
200+
}
201+
171202
inline Basic* basic_return()
172203
{
173204
static Basic value{};

‎Benchmarks/benchmark_luabridge.cpp‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -267,7 +267,7 @@ void multi_return_measure(benchmark::State& state)
267267
setSkipped(state, "unsupported conceptual multi-return conversion in LuaBridge vanilla");
268268
}
269269

270-
void base_derived_measure(benchmark::State& state)
270+
void derived_base_measure(benchmark::State& state)
271271
{
272272
setSkipped(state, "unsupported for multi inheritance in LuaBridge vanilla");
273273
}
@@ -498,7 +498,7 @@ BENCHMARK(userdata_variable_access_last_measure)->Name("userdata_variable_access
498498
BENCHMARK(multi_return_lua_measure)->Name("multi_return_lua_measure");
499499
BENCHMARK(multi_return_measure)->Name("multi_return_measure");
500500
BENCHMARK(stateful_function_object_measure)->Name("stateful_function_object_measure");
501-
BENCHMARK(base_derived_measure)->Name("base_derived_measure");
501+
BENCHMARK(derived_base_measure)->Name("derived_base_measure");
502502
BENCHMARK(return_userdata_measure)->Name("return_userdata_measure");
503503
BENCHMARK(optional_success_measure)->Name("optional_success_measure");
504504
BENCHMARK(optional_half_failure_measure)->Name("optional_half_failure_measure");

‎Benchmarks/benchmark_luabridge3.cpp‎

Lines changed: 116 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,34 @@
1212
#include <cmath>
1313
#include <tuple>
1414

15+
namespace luabridge {
16+
17+
template <>
18+
struct StackConversion<lbsbench::Vec3Target>
19+
{
20+
static constexpr bool enabled = true;
21+
};
22+
23+
template <>
24+
struct StackConverter<lbsbench::Vec3Target, lbsbench::Vec3Source>
25+
{
26+
static lbsbench::Vec3Target convert(const lbsbench::Vec3Source& s)
27+
{
28+
return {s.x, s.y, s.z};
29+
}
30+
};
31+
32+
template <>
33+
struct StackConverter<lbsbench::Vec3Target, lbsbench::ColorSource>
34+
{
35+
static lbsbench::Vec3Target convert(const lbsbench::ColorSource& s)
36+
{
37+
return {s.r, s.g, s.b};
38+
}
39+
};
40+
41+
} // namespace luabridge
42+
1543
namespace {
1644

1745
using namespace lbsbench;
@@ -396,7 +424,7 @@ void multi_return_measure(benchmark::State& state)
396424
benchmark::DoNotOptimize(x);
397425
}
398426

399-
void base_derived_measure(benchmark::State& state)
427+
void derived_base_measure(benchmark::State& state)
400428
{
401429
lua_State* L = makeLua();
402430

@@ -657,6 +685,88 @@ void implicit_inheritance_measure(benchmark::State& state)
657685
}
658686
}
659687

688+
void registerConverter(lua_State* L)
689+
{
690+
luabridge::getGlobalNamespace(L)
691+
.beginClass<Vec3Source>("Vec3Source")
692+
.addConstructor<void(float, float, float)>()
693+
.addConverter<Vec3Target>()
694+
.endClass()
695+
.beginClass<ColorSource>("ColorSource")
696+
.addConstructor<void(float, float, float)>()
697+
.addConverter<Vec3Target>()
698+
.endClass()
699+
.beginClass<Vec3Target>("Vec3Target")
700+
.addConstructor<void(float, float, float)>()
701+
.endClass()
702+
.addFunction("sumVec3", &sumVec3)
703+
.addFunction("sumVec3Ref", &sumVec3Ref);
704+
}
705+
706+
void converter_exact_type_measure(benchmark::State& state)
707+
{
708+
lua_State* L = makeLua();
709+
registerConverter(L);
710+
luaDoStringOrThrow(L, "obj = Vec3Target(1, 2, 3)", "converter_exact_type setup");
711+
luaDoStringOrThrow(L, "function invoke_exact() return sumVec3(obj) end", "converter_exact_type closure setup");
712+
713+
for (auto _ : state)
714+
{
715+
(void) _;
716+
lua_getglobal(L, "invoke_exact");
717+
luaCheckOrThrow(L, lua_pcall(L, 0, 1, 0), "invoke_exact");
718+
lua_pop(L, 1);
719+
}
720+
}
721+
722+
void converter_phase3_value_measure(benchmark::State& state)
723+
{
724+
lua_State* L = makeLua();
725+
registerConverter(L);
726+
luaDoStringOrThrow(L, "obj = Vec3Source(1, 2, 3)", "converter_phase3_value setup");
727+
luaDoStringOrThrow(L, "function invoke_conv_value() return sumVec3(obj) end", "converter_phase3_value closure setup");
728+
729+
for (auto _ : state)
730+
{
731+
(void) _;
732+
lua_getglobal(L, "invoke_conv_value");
733+
luaCheckOrThrow(L, lua_pcall(L, 0, 1, 0), "invoke_conv_value");
734+
lua_pop(L, 1);
735+
}
736+
}
737+
738+
void converter_phase3_ref_measure(benchmark::State& state)
739+
{
740+
lua_State* L = makeLua();
741+
registerConverter(L);
742+
luaDoStringOrThrow(L, "obj = Vec3Source(1, 2, 3)", "converter_phase3_ref setup");
743+
luaDoStringOrThrow(L, "function invoke_conv_ref() return sumVec3Ref(obj) end", "converter_phase3_ref closure setup");
744+
745+
for (auto _ : state)
746+
{
747+
(void) _;
748+
lua_getglobal(L, "invoke_conv_ref");
749+
luaCheckOrThrow(L, lua_pcall(L, 0, 1, 0), "invoke_conv_ref");
750+
lua_pop(L, 1);
751+
}
752+
}
753+
754+
void converter_multi_registered_measure(benchmark::State& state)
755+
{
756+
lua_State* L = makeLua();
757+
registerConverter(L);
758+
luaDoStringOrThrow(L, "obj = ColorSource(0.5, 1, 0)", "converter_multi_registered setup");
759+
luaDoStringOrThrow(L, "function invoke_conv_multi() return sumVec3(obj) end", "converter_multi_registered closure setup");
760+
761+
for (auto _ : state)
762+
{
763+
(void) _;
764+
lua_getglobal(L, "invoke_conv_multi");
765+
luaCheckOrThrow(L, lua_pcall(L, 0, 1, 0), "invoke_conv_multi");
766+
lua_pop(L, 1);
767+
}
768+
}
769+
660770
} // namespace
661771

662772
BENCHMARK(table_global_string_get_measure)->Name("table_global_string_get_measure");
@@ -675,7 +785,7 @@ BENCHMARK(userdata_variable_access_last_measure)->Name("userdata_variable_access
675785
BENCHMARK(multi_return_lua_measure)->Name("multi_return_lua_measure");
676786
BENCHMARK(multi_return_measure)->Name("multi_return_measure");
677787
BENCHMARK(stateful_function_object_measure)->Name("stateful_function_object_measure");
678-
BENCHMARK(base_derived_measure)->Name("base_derived_measure");
788+
BENCHMARK(derived_base_measure)->Name("derived_base_measure");
679789
BENCHMARK(return_userdata_measure)->Name("return_userdata_measure");
680790
BENCHMARK(optional_success_measure)->Name("optional_success_measure");
681791
BENCHMARK(optional_half_failure_measure)->Name("optional_half_failure_measure");
@@ -689,3 +799,7 @@ BENCHMARK(shared_ptr_return_measure)->Name("shared_ptr_return_measure");
689799
BENCHMARK(shared_ptr_pass_measure)->Name("shared_ptr_pass_measure");
690800
BENCHMARK(static_member_function_call_measure)->Name("static_member_function_call_measure");
691801
BENCHMARK(derived_method_call_measure)->Name("derived_method_call_measure");
802+
BENCHMARK(converter_exact_type_measure)->Name("converter_exact_type_measure");
803+
BENCHMARK(converter_phase3_value_measure)->Name("converter_phase3_value_measure");
804+
BENCHMARK(converter_phase3_ref_measure)->Name("converter_phase3_ref_measure");
805+
BENCHMARK(converter_multi_registered_measure)->Name("converter_multi_registered_measure");

‎Benchmarks/benchmark_sol3.cpp‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -348,7 +348,7 @@ void multi_return_measure(benchmark::State& state)
348348
benchmark::DoNotOptimize(x);
349349
}
350350

351-
void base_derived_measure(benchmark::State& state)
351+
void derived_base_measure(benchmark::State& state)
352352
{
353353
sol::state lua;
354354

@@ -602,7 +602,7 @@ BENCHMARK(userdata_variable_access_last_measure)->Name("userdata_variable_access
602602
BENCHMARK(multi_return_lua_measure)->Name("multi_return_lua_measure");
603603
BENCHMARK(multi_return_measure)->Name("multi_return_measure");
604604
BENCHMARK(stateful_function_object_measure)->Name("stateful_function_object_measure");
605-
BENCHMARK(base_derived_measure)->Name("base_derived_measure");
605+
BENCHMARK(derived_base_measure)->Name("derived_base_measure");
606606
BENCHMARK(return_userdata_measure)->Name("return_userdata_measure");
607607
BENCHMARK(optional_success_measure)->Name("optional_success_measure");
608608
BENCHMARK(optional_half_failure_measure)->Name("optional_half_failure_measure");

0 commit comments

Comments
 (0)