How To Profile QML App on Embedded Device
[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<br />DEFINES''= QT_DECLARATIVE_DEBUG<br />CONFIG += declarative_debug
- Ensure QTDIR refers to the installation path of QT for target as specified in _
prefix_e.g. PATH=/usr/local/qt-48x-emb/bin:$PATHe.g. QTDIR=/usr/local/qt-48x-emb<code><br /># Ensure PATH contains path of ''bin'' folder from installation path of Qt for target<br />
# Generate make file using the .prohost-cmd-prmt> makehost-cmd-prmt&gt; qmake app.pro<code><br /># Build the app<br />
# Transfer the app binaries and necessary app files to the target
> QML Profiler (External); this will popup a small dialog
h3. Launch QML Profiler (external) on host
# Launch QtCreator on host PC
# From the menu bar in QtCreator, select menu item Analyze
- 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,e.g. LD_LIBRARY_PATH=/usr/local/qt-48x-emb/lib:$LD_LIBRARY_PATH
target-prmt&gt; 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<br />
Remote debugger plugin NOT found
- Confirm if following libraries were built for target,
libqmldbg_tcp.so<br />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.