mirror of
https://github.com/Kelsidavis/WoWee.git
synced 2026-07-31 01:41:14 -04:00
- ATTRIBUTION.md: removed GLEW (not used — no glew.h includes, no
find_package(GLEW) in CMakeLists.txt); added the libraries that
ARE actually used (Vulkan, vk-bootstrap, zlib, FFmpeg, Lua, Catch2,
nlohmann/json, stb, FidelityFX-FSR2). OpenSSL row clarified for 3.x.
- container/{builder-linux,builder-macos,builder-windows}.Dockerfile:
drop libglew-dev / vcpkg 'glew' — nothing links against GLEW, so
these were dead weight in the images.
- container/FLOW.md: matched the Dockerfile changes.
- docs/perf_baseline.md: Tracy is NOT vendored — building with
WOWEE_ENABLE_TRACY=ON references extern/tracy/ which doesn't exist.
Documented the required 'git clone' step. Also corrected the
M2::computeBoneMatrices / M2Renderer::update file paths
(m2_renderer_internal.h and m2_renderer_render.cpp, not
m2_renderer.cpp).
3.9 KiB
3.9 KiB
Performance Baseline — WoWee
Phase 0.3 deliverable. Measurements taken before any optimization work. Re-run after each phase to quantify improvement.
Tracy Profiler Integration
Tracy is integrated under the WOWEE_ENABLE_TRACY CMake option (default: OFF).
When enabled, zero-cost zone markers instrument the following critical paths.
Setup: Tracy is not vendored in this repo.
CMakeLists.txtlooks forextern/tracy/public/TracyClient.cppandextern/tracy/public/headers (lines 1045-1050). Clone Tracy into that path before configuring with-DWOWEE_ENABLE_TRACY=ON:git clone --depth 1 --branch v0.11.1 https://github.com/wolfpld/tracy extern/tracy
Instrumented Zones
| Zone Name | File | Purpose |
|---|---|---|
Application::run |
src/core/application.cpp | Main loop entry |
Application::update |
src/core/application.cpp | Per-frame game logic |
Renderer::beginFrame |
src/rendering/renderer.cpp | Vulkan frame begin |
Renderer::endFrame |
src/rendering/renderer.cpp | Post-process + present |
Renderer::update |
src/rendering/renderer.cpp | Renderer per-frame update |
Renderer::renderWorld |
src/rendering/renderer.cpp | Main world draw call |
Renderer::renderShadowPass |
src/rendering/renderer.cpp | Shadow depth pass |
PostProcess::execute |
src/rendering/post_process_pipeline.cpp | FSR/FXAA post-process |
M2::computeBoneMatrices |
src/rendering/m2_renderer_internal.h | CPU skeletal animation |
M2Renderer::update |
src/rendering/m2_renderer_render.cpp | M2 instance update + culling |
TerrainManager::update |
src/rendering/terrain_manager.cpp | Terrain streaming logic |
TerrainManager::processReadyTiles |
src/rendering/terrain_manager.cpp | GPU tile uploads |
ADTLoader::load |
src/pipeline/adt_loader.cpp | ADT binary parsing |
AssetManager::loadTexture |
src/pipeline/asset_manager.cpp | BLP texture loading |
AssetManager::loadDBC |
src/pipeline/asset_manager.cpp | DBC data file loading |
WorldSocket::update |
src/network/world_socket.cpp | Network packet dispatch |
FrameMark placed at frame boundary in Application::update to track FPS.
How to Profile
# Build with Tracy enabled
mkdir -p build_tracy && cd build_tracy
cmake .. -DCMAKE_BUILD_TYPE=RelWithDebInfo -DWOWEE_ENABLE_TRACY=ON
cmake --build . --parallel $(nproc)
# Run the client — Tracy will broadcast on default port (8086)
cd bin && ./wowee
# Connect with Tracy profiler GUI (separate download from https://github.com/wolfpld/tracy/releases)
# Or capture from CLI: tracy-capture -o trace.tracy
Baseline Scenarios
TODO: Record measurements once profiler is connected to a running instance. Each scenario should record: avg FPS, frame time (p50/p95/p99), and per-zone timings.
Scenario 1: Stormwind (Heavy M2/WMO)
- Location: Stormwind City center
- Load: Dense M2 models (NPCs, doodads), multiple WMO interiors
- Avg FPS: pending
- Frame time (p50/p95/p99): pending
- Top zones: pending
Scenario 2: The Barrens (Heavy Terrain)
- Location: Central Barrens
- Load: Many terrain tiles loaded, sparse M2, large draw distance
- Avg FPS: pending
- Frame time (p50/p95/p99): pending
- Top zones: pending
Scenario 3: Dungeon Instance (WMO-only)
- Location: Any dungeon instance (e.g., Deadmines entrance)
- Load: WMO interior rendering, no terrain
- Avg FPS: pending
- Frame time (p50/p95/p99): pending
- Top zones: pending
Notes
- When
WOWEE_ENABLE_TRACYis OFF (default), allZoneScopedN/FrameMarkmacros expand to nothing — zero runtime overhead. - Tracy requires a network connection to capture traces. Run the Tracy profiler GUI or
tracy-captureCLI alongside the client. - Debug builds are significantly slower due to -Og and no LTO; use RelWithDebInfo for representative measurements.