| # benchmark/Makefile — Build and run tinygltf v3 benchmarks | |
| # | |
| # Targets: | |
| # make — build gen_synthetic + bench_v3 | |
| # make generate — generate synthetic test scenes | |
| # make run — run benchmarks on all generated scenes | |
| # make report — run benchmarks and produce CSV report | |
| # make clean — remove binaries and generated scenes | |
| CXX ?= g++ | |
| CXXFLAGS ?= -O2 -std=c++17 -Wall -Wextra -Wno-unused-function | |
| CXXFLAGS += -fno-rtti -fno-exceptions | |
| INCLUDES = -I.. | |
| BINDIR = . | |
| GEN = $(BINDIR)/gen_synthetic | |
| BENCH_V3 = $(BINDIR)/bench_v3 | |
| # Iteration counts | |
| ITERATIONS ?= 10 | |
| WARMUP ?= 2 | |
| PREFIX ?= synthetic | |
| .PHONY: all generate run report clean | |
| all: $(GEN) $(BENCH_V3) | |
| $(GEN): gen_synthetic.cpp | |
| $(CXX) $(CXXFLAGS) -o $@ $< | |
| $(BENCH_V3): bench_v3.cpp ../tiny_gltf_v3.h ../tiny_gltf_v3.c ../tinygltf_json_c.h | |
| $(CXX) $(CXXFLAGS) $(INCLUDES) -o $@ $< | |
| # Generate synthetic scenes of varying sizes | |
| generate: $(GEN) | |
| @echo "=== Generating synthetic scenes ===" | |
| ./$(GEN) --prefix $(PREFIX) | |
| @echo "" | |
| @echo "Generated files (binary + GLB):" | |
| @ls -lh $(PREFIX)_*.gltf $(PREFIX)_*.glb $(PREFIX)_*.bin 2>/dev/null || true | |
| # Run benchmarks on all generated scenes | |
| run: $(BENCH_V3) generate | |
| @echo "" | |
| @echo "=================================================================" | |
| @echo " tinygltf v3 Benchmark" | |
| @echo "=================================================================" | |
| @echo "" | |
| @for f in $(PREFIX)_*.glb $(PREFIX)_*.gltf; do \ | |
| if [ -f "$$f" ]; then \ | |
| ./$(BENCH_V3) "$$f" --iterations $(ITERATIONS) --warmup $(WARMUP); \ | |
| echo ""; \ | |
| fi; \ | |
| done | |
| # Run benchmarks and produce CSV report | |
| report: $(BENCH_V3) generate | |
| @echo "file,size_bytes,iterations,parse_min_ms,parse_max_ms,parse_avg_ms,parse_median_ms,throughput_mbs,arena_peak_bytes,meshes,nodes,accessors,materials,animations" > benchmark_report.csv | |
| @for f in $(PREFIX)_*.glb $(PREFIX)_*.gltf; do \ | |
| if [ -f "$$f" ]; then \ | |
| ./$(BENCH_V3) "$$f" --iterations $(ITERATIONS) --warmup $(WARMUP) --csv | tail -1 >> benchmark_report.csv; \ | |
| fi; \ | |
| done | |
| @echo "=== Report written to benchmark_report.csv ===" | |
| @cat benchmark_report.csv | column -t -s, | |
| clean: | |
| rm -f $(GEN) $(BENCH_V3) | |
| rm -f $(PREFIX)_*.gltf $(PREFIX)_*.glb $(PREFIX)_*.bin | |
| rm -f benchmark_report.csv |