QmlProfiler: Add qml, register types via qt_add_qml_module

Use the CMake-based qml API to create the "QtCreator.QmlProfiler"
module.
This uses qt_add_qml_module, which was introduced with Qt 6.2.

For Qt 6.1 and below, everything compiles and runs like before this
change.

Change-Id: If381059bbf2a0a2b92c7f62e6da3142036ac6bbc
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
This commit is contained in:
Alessandro Portale
2021-06-24 23:15:42 +02:00
parent 3ebe5dbb99
commit 9624d2cd69
6 changed files with 104 additions and 59 deletions

View File

@@ -1,54 +1,5 @@
add_qtc_plugin(QmlProfiler
CONDITION TARGET Tracing
DEPENDS QmlDebug QmlJS Tracing Qt5::QuickWidgets
PLUGIN_DEPENDS Core Debugger ProjectExplorer QtSupport TextEditor
SOURCES
debugmessagesmodel.cpp debugmessagesmodel.h
flamegraphmodel.cpp flamegraphmodel.h
flamegraphview.cpp flamegraphview.h
inputeventsmodel.cpp inputeventsmodel.h
memoryusagemodel.cpp memoryusagemodel.h
pixmapcachemodel.cpp pixmapcachemodel.h
qml/qmlprofiler.qrc
qmlevent.cpp qmlevent.h
qmleventlocation.cpp qmleventlocation.h
qmleventtype.cpp qmleventtype.h
qmlnote.cpp qmlnote.h
qmlprofiler_global.h
qmlprofileractions.cpp qmlprofileractions.h
qmlprofileranimationsmodel.cpp qmlprofileranimationsmodel.h
qmlprofilerattachdialog.cpp qmlprofilerattachdialog.h
qmlprofilerbindingloopsrenderpass.cpp qmlprofilerbindingloopsrenderpass.h
qmlprofilerclientmanager.cpp qmlprofilerclientmanager.h
qmlprofilerconstants.h
qmlprofilerdetailsrewriter.cpp qmlprofilerdetailsrewriter.h
qmlprofilereventsview.h
qmlprofilereventtypes.h
qmlprofilermodelmanager.cpp qmlprofilermodelmanager.h
qmlprofilernotesmodel.cpp qmlprofilernotesmodel.h
qmlprofilerplugin.cpp qmlprofilerplugin.h
qmlprofilerrangemodel.cpp qmlprofilerrangemodel.h
qmlprofilerrunconfigurationaspect.cpp qmlprofilerrunconfigurationaspect.h
qmlprofilerruncontrol.cpp qmlprofilerruncontrol.h
qmlprofilersettings.cpp qmlprofilersettings.h
qmlprofilerstatemanager.cpp qmlprofilerstatemanager.h
qmlprofilerstatewidget.cpp qmlprofilerstatewidget.h
qmlprofilerstatisticsmodel.cpp qmlprofilerstatisticsmodel.h
qmlprofilerstatisticsview.cpp qmlprofilerstatisticsview.h
qmlprofilertextmark.cpp qmlprofilertextmark.h
qmlprofilertimelinemodel.cpp qmlprofilertimelinemodel.h
qmlprofilertool.cpp qmlprofilertool.h
qmlprofilertraceclient.cpp qmlprofilertraceclient.h
qmlprofilertracefile.cpp qmlprofilertracefile.h
qmlprofilertraceview.cpp qmlprofilertraceview.h
qmlprofilerviewmanager.cpp qmlprofilerviewmanager.h
qmltypedevent.cpp qmltypedevent.h
scenegraphtimelinemodel.cpp scenegraphtimelinemodel.h
)
extend_qtc_plugin(QmlProfiler
CONDITION WITH_TESTS
SOURCES
if(WITH_TESTS)
set(TEST_SOURCES
tests/debugmessagesmodel_test.cpp tests/debugmessagesmodel_test.h
tests/fakedebugserver.cpp tests/fakedebugserver.h
tests/flamegraphmodel_test.cpp tests/flamegraphmodel_test.h
@@ -70,4 +21,91 @@ extend_qtc_plugin(QmlProfiler
tests/qmlprofilertraceclient_test.cpp tests/qmlprofilertraceclient_test.h
tests/qmlprofilertraceview_test.cpp tests/qmlprofilertraceview_test.h
tests/tests.qrc
)
else()
set(TEST_SOURCES "")
endif()
set(QMLPROFILER_CPP_SOURCES
debugmessagesmodel.cpp debugmessagesmodel.h
flamegraphmodel.cpp flamegraphmodel.h
flamegraphview.cpp flamegraphview.h
inputeventsmodel.cpp inputeventsmodel.h
memoryusagemodel.cpp memoryusagemodel.h
pixmapcachemodel.cpp pixmapcachemodel.h
qmlevent.cpp qmlevent.h
qmleventlocation.cpp qmleventlocation.h
qmleventtype.cpp qmleventtype.h
qmlnote.cpp qmlnote.h
qmlprofiler_global.h
qmlprofileractions.cpp qmlprofileractions.h
qmlprofileranimationsmodel.cpp qmlprofileranimationsmodel.h
qmlprofilerattachdialog.cpp qmlprofilerattachdialog.h
qmlprofilerbindingloopsrenderpass.cpp qmlprofilerbindingloopsrenderpass.h
qmlprofilerclientmanager.cpp qmlprofilerclientmanager.h
qmlprofilerconstants.h
qmlprofilerdetailsrewriter.cpp qmlprofilerdetailsrewriter.h
qmlprofilereventsview.h
qmlprofilereventtypes.h
qmlprofilermodelmanager.cpp qmlprofilermodelmanager.h
qmlprofilernotesmodel.cpp qmlprofilernotesmodel.h
qmlprofilerplugin.cpp qmlprofilerplugin.h
qmlprofilerrangemodel.cpp qmlprofilerrangemodel.h
qmlprofilerrunconfigurationaspect.cpp qmlprofilerrunconfigurationaspect.h
qmlprofilerruncontrol.cpp qmlprofilerruncontrol.h
qmlprofilersettings.cpp qmlprofilersettings.h
qmlprofilerstatemanager.cpp qmlprofilerstatemanager.h
qmlprofilerstatewidget.cpp qmlprofilerstatewidget.h
qmlprofilerstatisticsmodel.cpp qmlprofilerstatisticsmodel.h
qmlprofilerstatisticsview.cpp qmlprofilerstatisticsview.h
qmlprofilertextmark.cpp qmlprofilertextmark.h
qmlprofilertimelinemodel.cpp qmlprofilertimelinemodel.h
qmlprofilertool.cpp qmlprofilertool.h
qmlprofilertraceclient.cpp qmlprofilertraceclient.h
qmlprofilertracefile.cpp qmlprofilertracefile.h
qmlprofilertraceview.cpp qmlprofilertraceview.h
qmlprofilerviewmanager.cpp qmlprofilerviewmanager.h
qmltypedevent.cpp qmltypedevent.h
scenegraphtimelinemodel.cpp scenegraphtimelinemodel.h
)
add_qtc_plugin(QmlProfiler
DEPENDS QmlDebug QmlJS Tracing Qt5::QuickWidgets
PLUGIN_DEPENDS Core Debugger ProjectExplorer QtSupport TextEditor
SOURCES
${TEST_SOURCES}
)
if(${Qt5_VERSION} VERSION_LESS "6.2.0")
extend_qtc_plugin(QmlProfiler
SOURCES
${QMLPROFILER_CPP_SOURCES}
qml/qmlprofiler.qrc
)
else() # < Qt 6.2
set(QMLPROFILER_QML_FILES
qml/QmlProfilerFlameGraphView.qml
)
set(QMLPROFILER_QML_RESOURCES
qml/bindingloops.frag
qml/bindingloops.vert
)
foreach(file IN LISTS QMLPROFILER_QML_FILES QMLPROFILER_QML_RESOURCES)
get_filename_component(fileName "${file}" NAME)
set_source_files_properties("${file}" PROPERTIES QT_RESOURCE_ALIAS "${fileName}")
endforeach()
qt_add_qml_module(QmlProfiler
URI "QtCreator.QmlProfiler"
VERSION "1.0"
NO_CREATE_PLUGIN_TARGET
QML_FILES
${QMLPROFILER_QML_FILES}
RESOURCES
${QMLPROFILER_QML_RESOURCES}
SOURCES
${QMLPROFILER_CPP_SOURCES}
)
endif() # < Qt 6.2

View File

@@ -55,6 +55,10 @@ struct FlameGraphData {
class FlameGraphModel : public QAbstractItemModel
{
Q_OBJECT
#if QT_VERSION >= QT_VERSION_CHECK(6, 2, 0)
QML_NAMED_ELEMENT(QmlProfilerFlameGraphModel)
QML_UNCREATABLE("use the context property")
#endif // Qt >= 6.2
public:
enum Role {
TypeIdRole = Qt::UserRole + 1, // Sort by data, not by displayed string

View File

@@ -48,15 +48,16 @@ FlameGraphView::FlameGraphView(QmlProfilerModelManager *manager, QWidget *parent
#if QT_VERSION < QT_VERSION_CHECK(6, 2, 0)
qmlRegisterType<FlameGraph::FlameGraph>("QtCreator.Tracing", 1, 0, "FlameGraph");
#endif // Qt < 6.2
qmlRegisterUncreatableType<FlameGraphModel>("QtCreator.QmlProfiler", 1, 0,
"QmlProfilerFlameGraphModel",
QLatin1String("use the context property"));
#endif // Qt < 6.2
Timeline::TimelineTheme::setupTheme(m_content->engine());
m_content->rootContext()->setContextProperty(QStringLiteral("flameGraphModel"), m_model);
m_content->setSource(QUrl(QStringLiteral("qrc:/qmlprofiler/QmlProfilerFlameGraphView.qml")));
m_content->setSource(
QUrl(QStringLiteral("qrc:/QtCreator/QmlProfiler/QmlProfilerFlameGraphView.qml")));
m_content->setClearColor(Utils::creatorTheme()->color(Utils::Theme::Timeline_BackgroundColor1));
m_content->setResizeMode(QQuickWidget::SizeRootObjectToView);

View File

@@ -24,7 +24,7 @@
****************************************************************************/
import QtCreator.QmlProfiler 1.0
import "../QtCreator/Tracing/" // TODO: Turn into module import when possible
import "../Tracing" // TODO: Turn into module import when possible
FlameGraphView {
id: root

View File

@@ -1,5 +1,5 @@
<RCC>
<qresource prefix="/qmlprofiler">
<qresource prefix="/QtCreator/QmlProfiler">
<file>bindingloops.vert</file>
<file>bindingloops.frag</file>
<file>QmlProfilerFlameGraphView.qml</file>

View File

@@ -317,11 +317,13 @@ BindingLoopMaterialShader::BindingLoopMaterialShader()
: QSGMaterialShader()
{
#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
setShaderSourceFile(QOpenGLShader::Vertex, QStringLiteral(":/qmlprofiler/bindingloops.vert"));
setShaderSourceFile(QOpenGLShader::Fragment, QStringLiteral(":/qmlprofiler/bindingloops.frag"));
setShaderSourceFile(QOpenGLShader::Vertex,
QStringLiteral(":/QtCreator/QmlProfiler/bindingloops.vert"));
setShaderSourceFile(QOpenGLShader::Fragment,
QStringLiteral(":/QtCreator/QmlProfiler/bindingloops.frag"));
#else // < Qt 6
setShaderFileName(VertexStage, ":/qmlprofiler/bindingloops.vert");
setShaderFileName(FragmentStage, ":/qmlprofiler/bindingloops.frag");
setShaderFileName(VertexStage, ":/QtCreator/QmlProfiler/bindingloops.vert");
setShaderFileName(FragmentStage, ":/QtCreator/QmlProfiler/bindingloops.frag");
#endif // < Qt 6
}