mirror of
https://github.com/Kelsidavis/WoWee.git
synced 2026-04-05 04:33:51 +00:00
- add new tests: - test_blp_loader.cpp - test_dbc_loader.cpp - test_entity.cpp - test_frustum.cpp - test_m2_structs.cpp - test_opcode_table.cpp - test_packet.cpp - test_srp.cpp - CMakeLists.txt - add docs and progress tracking: - TESTING.md - perf_baseline.md - update project config/build: - .gitignore - CMakeLists.txt - test.sh - core engine updates: - application.cpp - game_handler.cpp - world_socket.cpp - adt_loader.cpp - asset_manager.cpp - m2_renderer.cpp - post_process_pipeline.cpp - renderer.cpp - terrain_manager.cpp - game_screen.cpp - add profiler header: - profiler.hpp
3.5 KiB
3.5 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 v0.11.1 integrated under WOWEE_ENABLE_TRACY CMake option (default: OFF).
When enabled, zero-cost zone markers instrument the following critical paths:
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.cpp | CPU skeletal animation |
M2Renderer::update |
src/rendering/m2_renderer.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.