Profiling Rockbox

(from docs/TECH)

Rockbox contains a profiling system which can be used to monitor call count and time in function for a specific set of functions on a single thread. This can be used to optimize frequently-called functions or code blocks.

To use this functionality:

Configure a developer build with profiling support.

Make sure that the functions of interest will be compiled with the PROFILE_OPTS added to their CFLAGS

On the same thread as these functions will be run, surround the relevent running time with calls to profile_thread and profstop. (For codecs, this can be done in the codec.c file for example)

Compile and run the code on the target, after the section to be profiled exits (when profstop is called) a profile.out file will be written to the player's root. The test_codec program is a good way to do this.

Use the tools/profile_reader/profile_reader.pl script to convert the profile.out into a human readable format. This script requires the releventrelevant map filesfiles,the objdump version to use, and object (or elf or library) files created in the build. (ex: ./profile_reader.pl/tools/profile_reader/profile_reader.pl profile.out vorbis.map libTremor.a 0)arm-elf-objdump wma.map wma.elf1)

There is also a profile_comparator.pl script which can compare two profile runs as output by the above script to show percent change from optimization

profile_reader.pl requires a recent binutils that can automatically handle target object files, or objdump in path to be the target-objdump.

profile_reader.pl currently only works on m68k targets. adapting it toARM and Coldfire, and maywork on other targetstargets.is non-trivial, but shouldn't be too difficult