initial perf tools

This commit is contained in:
2026-08-03 13:45:59 -07:00
parent 85d475314f
commit e6be17fb71
9 changed files with 4282 additions and 0 deletions
+48
View File
@@ -1,4 +1,16 @@
.PHONY: shaders-vulkan shaders-d3d12 shaders-metal shaders-all bake toad hello_sprite crowd camera_sandbox clips check test help
.PHONY: flame flame-build flame-record flame-svg flame-report flame-tools
# Flamegraph profiling (needs: pacman -S perf). Example: make flame or make flame FLAME_EXAMPLE=toad
FLAME_EXAMPLE ?= crowd
FLAME_BIN := $(FLAME_EXAMPLE)_perf
FLAMEGRAPH_DIR ?= tools/FlameGraph
FLAME_OUT_DIR ?= flame
# One stamp per `make` invocation so svg/jpg/report share a name.
ifndef FLAME_STAMP
FLAME_STAMP := $(shell date +%Y%m%d-%H%M%S)
endif
FLAME_PREFIX := $(FLAME_OUT_DIR)/$(FLAME_EXAMPLE)-$(FLAME_STAMP)
help:
@echo "Targets:"
@@ -14,6 +26,11 @@ help:
@echo " crowd Many sprites, one Character_Data"
@echo " camera_sandbox Pan camera / Space toggles follow"
@echo " clips Keys 1/2 switch idle/walk"
@echo " flame Build+record+SVG+JPG+text report (FLAME_EXAMPLE=$(FLAME_EXAMPLE))"
@echo " flame-build Debug binary only ($(FLAME_BIN))"
@echo " flame-record perf record (play, then quit)"
@echo " flame-svg Convert perf.data -> $(FLAME_PREFIX).svg/.jpg"
@echo " flame-report Convert perf.data -> $(FLAME_PREFIX)-report.txt"
bake:
./scripts/bake_all.sh
@@ -31,6 +48,7 @@ shaders-all: shaders-vulkan shaders-d3d12 shaders-metal
test:
odin test engine
odin test assetbake
check:
odin check examples/toad -collection:pkg=.
@@ -53,3 +71,33 @@ camera_sandbox:
clips:
odin run examples/clips -collection:pkg=.
flame-tools:
@if [ ! -x "$(FLAMEGRAPH_DIR)/stackcollapse-perf.pl" ] || [ ! -x "$(FLAMEGRAPH_DIR)/flamegraph.pl" ]; then \
echo "Cloning FlameGraph scripts into $(FLAMEGRAPH_DIR)..."; \
git clone --depth 1 https://github.com/brendangregg/FlameGraph.git "$(FLAMEGRAPH_DIR)"; \
fi
flame-build:
odin build examples/$(FLAME_EXAMPLE) -collection:pkg=. -out:$(FLAME_BIN) -debug
flame-record: flame-build
@echo ">>> Profiling ./$(FLAME_BIN) — play for ~1020s under load, then quit the window."
@echo ">>> If perf fails with permissions: sudo sysctl kernel.perf_event_paranoid=1"
perf record -F 99 -g --call-graph dwarf -- ./$(FLAME_BIN)
flame-svg: flame-tools
@test -f perf.data || { echo "No perf.data — run: make flame-record"; exit 1; }
@mkdir -p "$(FLAME_OUT_DIR)"
perf script | "$(FLAMEGRAPH_DIR)/stackcollapse-perf.pl" | "$(FLAMEGRAPH_DIR)/flamegraph.pl" > "$(FLAME_PREFIX).svg"
magick "$(FLAME_PREFIX).svg" "$(FLAME_PREFIX).jpg"
@echo "Wrote $(FLAME_PREFIX).svg and $(FLAME_PREFIX).jpg"
flame-report:
@test -f perf.data || { echo "No perf.data — run: make flame-record"; exit 1; }
@mkdir -p "$(FLAME_OUT_DIR)"
perf report --stdio --no-children > "$(FLAME_PREFIX)-report.txt"
@echo "Wrote $(FLAME_PREFIX)-report.txt"
flame: flame-record flame-svg flame-report
@echo "Artifacts: $(FLAME_PREFIX).{svg,jpg} $(FLAME_PREFIX)-report.txt"