dev builds
themes manual
device status forums
mailing lists
IRC bugs
dev guide

Search | Go
Wiki > Main > SourceProfiling

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:
  1. Configure a developer build with profiling support (../tools/configure, then select "(A)dvanced" and "(P)rofiling").
  2. Make sure that the functions of interest will be compiled with the PROFILE_OPTS added to their CFLAGS (e.g. hardcoding "-finstrument-functions" to CFLAGS)
  3. 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. In this case call ci->profile_thread() at the beginning of codec_run() and ci->profstop() right before returning from codec_run()).
  4. 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 (remark: test_codec is compoiled in when ../tools/configure "(A)dvanced" and "(T)est plugins" is selected).
  5. Use the tools/profile_reader/ 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.out arm-elf-eabi-objdump wma.elf 1)

There is also a script which can compare two profile runs as output by the above script to show percent change from optimization requires a recent binutils that can automatically handle target object files, or objdump in path to be the target-objdump. works on ARM and Coldfire, and may work on other targets.

r5 - 02 Apr 2021 - 20:46:07 - UnknownUser

Copyright © by the contributing authors.