/**************************************************************************** ** ** Copyright (c) 2013 Digia Plc and/or its subsidiary(-ies). ** Contact: http://www.qt-project.org/legal ** ** This file is part of Qt Creator ** ** ** GNU Free Documentation License ** ** Alternatively, this file may be used under the terms of the GNU Free ** Documentation License version 1.3 as published by the Free Software ** Foundation and appearing in the file included in the packaging of this ** file. ** ** ****************************************************************************/ // ********************************************************************** // NOTE: the sections are not ordered by their logical order to avoid // reshuffling the file each time the index order changes (i.e., often). // Run the fixnavi.pl script to adjust the links to the index order. // ********************************************************************** /*! \contentspage index.html \previouspage creator-analyze-mode.html \page creator-qml-performance-monitor.html \nextpage creator-valgrind-overview.html \title Profiling QML Applications To monitor the performance of an application in the QML Profiler: \list 1 \o To be able to profile an application, you must set up QML debugging for the project. For more information, see \l{Setting Up QML Debugging}. \o In the \gui Projects mode, select Qt 4.7.4 in the \gui {Qt version} field. \note To profile applications on devices, you must install Qt 4.7.4 or later libraries on them. \o Select \gui {Analyze > QML Profiler} to profile the current application. \o Select the \inlineimage qtcreator-analyze-start-button.png (\gui Start) button to start the application from the QML Profiler. \note If data collection does not start automatically, select the \inlineimage qtcreator-analyzer-button.png (\gui {Enable Profiling}) button. \endlist When you start analyzing an application, the application is launched, and the QML Profiler immediately begins to collect data. This is indicated by the time running in the \gui Elapsed field. Data is collected until you select the \inlineimage qtcreator-debug-button-stop.png (\gui Stop) button. Data collection takes time, and therefore, there might be a delay before the data is displayed. Do not use application commands to exit the application, because data is sent to the QML Profiler when you select the \gui Stop button. The application continues to run for some seconds, after which it is stopped automatically. If you exit the application, the data is not sent. Select the \gui {Disable Profiling} button to disable the automatic start of the data collection when an application is launched. Data collection starts when you select the button again. To save all the collected data, right-click any QML Profiler view to open the context menu, and then select \gui {Save QML Trace}. To view the saved data, select \gui {Load QML Trace}. You can also deliver the saved data to other developers for examination or load data saved by them. \section1 Attaching to Running Qt Quick Applications To profile Qt Quick applications that are not launched by \QC, select \gui {Analyze > QML Profiler (External)}. You must enable QML debugging for the application in the project build settings. For more information, see \l{Setting Up QML Debugging}. In the \gui {QML Profiler} dialog, \gui Port field, specify the port to listen to. \section1 Analyzing Collected Data The \gui Timeline view displays graphical representations of: \list \o Painting operations \o Compiling the QML sources \o Creating elements \o Binding evaluations \o Signal handling \o Summary of the recorded period \endlist \image qtcreator-qml-performance-monitor.png "QML Profiler" Each row in the timeline (6) describes a type of QML events that were recorded. Move the cursor on an event on a row to see how long it takes and where in the source it is being called. To display the information only when an event is selected, disable the \gui {View Event Information on Mouseover} button (5). The outline (10) summarizes the period for which data was collected. Drag the zoom range (8) or click the outline to move on the outline. You can also move between events by selecting the \gui {Jump to Previous Event} (1) and \gui {Jump to Next Event} (2) buttons. Select the \gui {Show Zoom Slider} button (3) to open a slider that you can use to set the zoom level. You can also drag the zoom handles (9). To reset the default zoom level, right-click the timeline to open the context menu, and select \gui {Reset Zoom}. \section2 Selecting Event Ranges You can select an event range (7) to view the frame rate of events and to compare it with the frame rate of similar events. Select the \gui {Select Range} button (4) to activate the selection tool. Then click in the timeline to specify the beginning of the event range. Drag the selection handle to define the end of the range. The length of the range indicates the frame rate of the event. You can use event ranges also to measure delays between two subsequent events. Place a range between the end of the first event and the beginning of the second event. The \gui Duration field displays the delay between the events in milliseconds. To zoom into an event range, double-click it. To remove an event range, close the \gui Selection dialog. \section2 Evaluating Bindings On the \gui Binding row, you can see when a binding is evaluated and how long the evaluation takes. Move the mouse over the binding for details about the binding: location in the source code, duration, and source code. Click the binding to move the cursor in the code editor to the part of the code where the binding is called. \section1 Viewing Events The \gui Events view displays the number of times each binding is called and the time the calls take. This allows you to examine which events you need to optimize. A high number of calls might indicate that a binding is called unnecessarily. Click on a binding to move to it in the source code in the code editor. \image qtcreator-analyzer-bindings.png "Events view" The \gui Callers and \gui Callees panes show dependencies between events. They allow you to examine the internal functions of the application. The \gui Callers pane summarizes the QML events that trigger a binding. This tells you what caused a change in a binding. The \gui Callees pane summarizes the QML events that a binding triggers. This tells you which QML events are affected if you change a binding. Click on a binding to move to it in the source code in the code editor. When you select an event in the \gui Timeline view, information about it is displayed in the \gui Events view. To view an event range in the \gui Events view, select \gui {Limit Events Pane to Current Range} in the context menu in the \gui Timeline view. To copy the contents of one view or row to the clipboard, select \gui {Copy Table} or \gui {Copy Row} in the context menu. You can view similar information about JavaScript events in the \gui JavaScript view. \image qml-profiler-javascript.png "JavaScript view" \section2 Viewing More Data The QML JavaScript engine optimizes trivial bindings. The QML Profiler does not receive information about optimized bindings, and therefore, it displays the text \gui {} and the message \gui {Source code not available} in the \gui Callers and \gui {Callees} panes. To inspect the optimized bindings, turn off the QML optimizer by setting the environment variable QML_DISABLE_OPTIMIZER to 1. To set the environment variable for the current project in the project settings: \list 1 \o Select \gui {Projects > Run}. \o In \gui {Run Environment}, click \gui Add. \o Add the QML_DISABLE_OPTIMIZER variable and set its value to 1. \endlist */