How To Profile QML App on Embedded Device
Jump to navigation
Jump to search
[toc align_right="yes" depth="2"]
How to profile QML app on embedded device
Information on profiling QML app is scattered in places so I thought of putting it together in one place.
Prerequisite
NOTE: Assumption is that Linux PC is used as development environment
- Qt for host PC is installed. This is required to launch QtCreator
- Make sure that option "-no-declarative-debug" was NOT specified when configuring Qt for target device
- if Qt for target was configured with -prefix <installation-path> then make sure that same installation path exists on target
e.g. -prefix /usr/local/qt-48x-emb is specified then copy contents of /usr/local/qt-48x-emb from host to target at /usr/local/qt-48x-emb
- Make sure Qt for target was built using same toolchain that will be used to build the app
- Host PC (which will be running QtCreator) and target should be on same network
NOTE:
Profiling
At high level, to profile a QML app one will require to carry out following steps,
- Build the QML app to be profiled for target device
- Launch QML Profiler (external) from QtCreator on host
- Launch QML app on target with commandline options to enable remote profiling
Steps for building app
- Make sure that following options are added to the application's .pro file
DEFINES ''= QMLJSDEBUGGER
DEFINES''= QT_DECLARATIVE_DEBUG
CONFIG += declarative_debug
- Ensure QTDIR refers to the installation path of QT for target as specified in _-prefix_
e.g. QTDIR=/usr/local/qt-48x-emb<code>
# Ensure PATH contains path of ''bin'' folder from installation path of Qt for target
e.g. PATH=/usr/local/qt-48x-emb/bin:$PATH
- Generate make file using the .pro
host-cmd-prmt> qmake app.pro<code>
# Build the app
host-cmd-prmt> make
- Transfer the app binaries and necessary app files to the target
h3. Launch QML Profiler (external) on host
- Launch QtCreator on host PC
- From the menu bar in QtCreator, select menu item Analyze-> QML Profiler (External); this will popup a small dialog
- Note the port value. It will be passed on as command line option when launching the app
- Detail instructions on profiling and interpreting the results can be found "here":http://doc.qt.io/qtcreator-2.7/creator-qml-performance-monitor.html
- Hit the OK button after you launch the app on target
Launch the app to be profiled on the target
- Start the app on the target as,
target-prmt> app -platform eglfs -qmljsdebugger=port:3456<code>
* Port value shall be same as that in the QML Profiler (External) Dialog
* the app is run against eglfs platform plugin but it could run against any other platform plugin if that is tested to be run on the target.
== Troubleshooting ==
=== Qt libraries not found ===
* Make sure Qt libraries are copied on the target
* export LD_LIBRARY_PATH to refer to the path where Qt libraries are copied
e.g. LD_LIBRARY_PATH=/usr/local/qt-48x-emb/lib:$LD_LIBRARY_PATH
Remote debugger plugin NOT found
- Confirm if following libraries were built for target,
libqmldbg_tcp.so
libqmldbg_inspector.so
- On target, these libraries should be present in /usr/local/qt-48x-emb/plugins/qmltooling
- export LD_LIBRARY_PATH to refer to the path where Qt plugin libraries are copied
e.g. LD_LIBRARY_PATH=/usr/local/qt-48x-emb/plugins/qmltooling:$LD_LIBRARY_PATH
Cannot capture the logs on host in QML profiler
- Make sure you synchronize launching of the app on target and starting the profiling on host PC.