This tutorial describes how to get started using the Ignition Common profiler to measure and visualize run-time performance of your software.
The goal of the profiler is to provide introspection and analysis when enabled at compile time, but to introduce no overhead when it is disabled at compile-time.
To control if the profiler is enabled, set the
IGN_PROFILER_ENABLE flag using cmake on the targets or sources that you are interested in (described below).
Enabling the Profiler
In order to use the profiler, inspection points must be added to the source code, and the application or library must be linked to the
To start, download the profiler.cc example.
The relevant corresponding C++ would be as follows:
Update your CMakeLists.txt to the following. Note that the profiler must be enabled at compile time in order to function.
cmake and build the example
Then execute the example and the profiler visualization:
From terminal 1:
From terminal 2, open the visualizer using one of the following commands
If you are successful, you should see the profiler output in a browser.
Using the Profiler
The profiler is used through a series of macros.
The two primary ways of profiling a section of code are to either use a matched pair of
IGN_PROFILE_END macros, or to use a single RAII-style macro
IGN_PROFILE. The RAII style will stop measuring once the scope that the macro was invoked in is left.
Additionally, each thread can be given a name for easy reference in the UI:
Configuring the Profiler
Specific profiler implementations may have further configuration options available.
Remotery can additionally be configured via environment variables. Most users should not need to change these for their applications.
RMT_PORT: Port to listen for incoming connections on.
RMT_QUEUE_SIZE: Size of the internal message queues
RMT_MSGS_PER_UPDATE: Upper limit on messages consumed per loop
RMT_SLEEP_BETWEEN_UPDATES: Controls profile server update rate.
These directly set the corresponding parameters in the
rmtSettings structure. For more information, consult the Remotery source