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 relevant map files, the objdump version to use, and object (or elf or library) files created in the build. (ex: /tools/profile_reader/profile_reader.pl profile.out arm-elf-objdump wma.map wma.elf 1)
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 works on ARM and Coldfire, and may work on other targets.
Copyright © by the contributing authors.