# Profiling on Linux If you're trying to make DevilutionX run faster or use less memory, profiling can be very helpful. ## gperftools [gperftools] is a library that provides a heap profiler and a CPU profiler. To install gperftools on Debian and Ubuntu, simply run: ```bash sudo apt install libgoogle-perftools-dev ``` You may also want to install debugging symbols for SDL2: ```bash sudo apt install libsdl2-dev-dbgsym ``` gperftools by default only comes with a basic visualizer. [pprof](https://github.com/google/pprof), also from Google, is a more fully-featured profile visualizer that provides an interactive web server with a flame graph, source annotation, etc. To install pprof, run: ```bash go install github.com/google/pprof@latest ``` ## CPU profiling with gperftools ```bash cmake -S. -Bbuild-gperf -DCMAKE_BUILD_TYPE=RelWithDebInfo -DGPERF=ON -DBUILD_TESTING=ON ``` Timedemo: ```bash tools/build_and_run_benchmark.py --gperf devilutionx -- --diablo --spawn --lang en --demo 0 --timedemo ``` Individual benchmarks (built when `BUILD_TESTING` is `ON`): ```bash tools/build_and_run_benchmark.py --gperf clx_render_benchmark ``` ## Heap profiling with gperftools Heap profiling produces a graph of all heap allocations that are alive between two points in a program. DevilutionX has built-in support for heap allocation via [gperftools]. Then, configure and build DevilutionX with the GPERF option: ```bash cmake -S. -Bbuild-gperf -DCMAKE_BUILD_TYPE=RelWithDebInfo -DGPERF=ON -DGPERF_HEAP_FIRST_GAME_ITERATION=ON cmake --build build-gperf -j $(nproc) ``` The `GPERF_HEAP_FIRST_GAME_ITERATION` option will make DevilutionX dump the heap profile of the first game iteration. Start DevilutionX and load a game: ```bash build-gperf/devilutionx ``` Heap profile data will be generated at `main.0001.heap`. To inspect the profile, run: ```bash google-pprof --web build-gperf/devilutionx main.0001.heap ``` See [gperftools heap profiling documentation] for more information. [gperftools]: https://github.com/gperftools/gperftools/wiki [gperftools heap profiling documentation]: https://gperftools.github.io/gperftools/heapprofile.html