Files
2026-09-16 14:07:40 +08:00

2.9 KiB
Vendored

Lua Binding Benchmarks

This directory contains Google Benchmark based executables for:

  • LuaBridge3 (current workspace)
  • LuaBridge vanilla (https://github.com/vinniefalco/LuaBridge)
  • sol3 (https://github.com/ThePhD/sol2)

All benchmark executables are built with the same embedded Lua 5.4.8 runtime source (Tests/Lua/LuaLibrary5.4.8.cpp) for fair comparisons.

Build

From project root:

cmake -S . -B Build -DCMAKE_BUILD_TYPE=Release -DLUABRIDGE_BENCHMARKS=ON
cmake --build Build --config Release --target LuaBridge3Benchmark LuaBridgeVanillaBenchmark

To also build Sol3 benchmark target:

cmake -S . -B Build -DCMAKE_BUILD_TYPE=Release -DLUABRIDGE_BENCHMARKS=ON -DLUABRIDGE_BENCHMARK_WITH_SOL3=ON
cmake --build Build --config Release --target Sol3Benchmark

Dependency Sources (FetchContent)

Defaults:

  • Google Benchmark: https://github.com/google/benchmark.git (v1.8.4)
  • sol3: https://github.com/ThePhD/sol2.git (v3.5.0)
  • LuaBridge vanilla: https://github.com/vinniefalco/LuaBridge.git (master)

You can override these at configure time:

cmake -S . -B Build \
  -DCMAKE_BUILD_TYPE=Release \
  -DLUABRIDGE_BENCHMARKS=ON \
  -DLUABRIDGE_SOL2_GIT_REPOSITORY=https://github.com/ThePhD/sol2.git \
  -DLUABRIDGE_SOL2_GIT_TAG=v3.5.0 \
  -DLUABRIDGE_VANILLA_GIT_REPOSITORY=https://github.com/vinniefalco/LuaBridge.git \
  -DLUABRIDGE_VANILLA_GIT_TAG=master \
  -DLUABRIDGE_GOOGLE_BENCHMARK_GIT_REPOSITORY=https://github.com/google/benchmark.git \
  -DLUABRIDGE_GOOGLE_BENCHMARK_GIT_TAG=v1.8.4

Run Benchmarks

Each executable supports standard Google Benchmark CLI flags.

./Build/Benchmarks/LuaBridge3Benchmark --benchmark_out=Build/Benchmarks/luabridge3.json --benchmark_out_format=json
./Build/Benchmarks/LuaBridgeVanillaBenchmark --benchmark_out=Build/Benchmarks/luabridge_vanilla.json --benchmark_out_format=json
./Build/Benchmarks/Sol3Benchmark --benchmark_out=Build/Benchmarks/sol3.json --benchmark_out_format=json  # if enabled

Recommended consistency flags for fair comparison:

--benchmark_min_time=0.1 --benchmark_repetitions=5

Plot Results

The script plot_benchmarks.py merges one or more Google Benchmark JSON files and generates a grouped comparison chart.

python3 Benchmarks/plot_benchmarks.py \
  --input Build/Benchmarks/luabridge3.json Build/Benchmarks/luabridge_vanilla.json Build/Benchmarks/sol3.json \
  --output Build/Benchmarks/lua_bindings_comparison.png

Outputs:

  • PNG chart (grouped bars, lower is better)
  • Optional skipped/error report file next to the image (*_skipped.txt)

Notes

  • Some vanilla LuaBridge benchmarks are marked as skipped where the feature is unsupported.
  • Sol3 target is optional (LUABRIDGE_BENCHMARK_WITH_SOL3) because current sol2 headers can fail to compile on some toolchains.
  • If you need stricter reproducibility, pin all FetchContent dependencies to commits instead of branches.