From 3ebe5dbb99f788e1c93e8484431c796b29f2e256 Mon Sep 17 00:00:00 2001 From: Alessandro Portale Date: Fri, 18 Jun 2021 16:19:24 +0200 Subject: [PATCH] Tracing: Use qt_add_qml_module for tst_flamegraphview Use the CMake-based qml API to create the "QtCreator.TstTracingFlameGraphView" 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: I7b1d7109c5fcff55c7be4b431f21281a63d13332 Reviewed-by: Ulf Hermann Reviewed-by: Qt CI Bot --- src/libs/tracing/CMakeLists.txt | 2 + .../tracing/flamegraphview/CMakeLists.txt | 26 +++++- .../flamegraphview/TestFlameGraphView.qml | 2 +- .../tracing/flamegraphview/flamegraphview.pro | 3 + .../tracing/flamegraphview/flamegraphview.qbs | 1 + .../tracing/flamegraphview/flamegraphview.qrc | 2 +- .../flamegraphview/testflamegraphmodel.h | 93 +++++++++++++++++++ .../flamegraphview/tst_flamegraphview.cpp | 69 +------------- 8 files changed, 129 insertions(+), 69 deletions(-) create mode 100644 tests/auto/tracing/flamegraphview/testflamegraphmodel.h diff --git a/src/libs/tracing/CMakeLists.txt b/src/libs/tracing/CMakeLists.txt index 8d445df2bff..4ebc77b913c 100644 --- a/src/libs/tracing/CMakeLists.txt +++ b/src/libs/tracing/CMakeLists.txt @@ -2,6 +2,8 @@ if (WITH_TESTS) set(TEST_SOURCES runscenegraphtest.cpp runscenegraphtest.h ) +else() + set(TEST_SOURCES "") endif() set(TRACING_CPP_SOURCES diff --git a/tests/auto/tracing/flamegraphview/CMakeLists.txt b/tests/auto/tracing/flamegraphview/CMakeLists.txt index 2a247c9ea18..f64a90d4d3b 100644 --- a/tests/auto/tracing/flamegraphview/CMakeLists.txt +++ b/tests/auto/tracing/flamegraphview/CMakeLists.txt @@ -1,6 +1,26 @@ add_qtc_test(tst_tracing_flamegraphview DEPENDS Tracing Qt5::QuickWidgets Qt5::Quick Utils - SOURCES - tst_flamegraphview.cpp - flamegraphview.qrc ) + +set(TSTFLAMEGRAPHVIEW_CPP_SOURCES + testflamegraphmodel.h + tst_flamegraphview.cpp +) + +if(${Qt5_VERSION} VERSION_LESS "6.2.0") + extend_qtc_test(tst_tracing_flamegraphview + SOURCES + ${TSTFLAMEGRAPHVIEW_CPP_SOURCES} + flamegraphview.qrc + ) +else() # < Qt 6.2 + qt_add_qml_module(tst_tracing_flamegraphview + URI "QtCreator.TstTracingFlameGraphView" + VERSION "1.0" + NO_CREATE_PLUGIN_TARGET + QML_FILES + TestFlameGraphView.qml + SOURCES + ${TSTFLAMEGRAPHVIEW_CPP_SOURCES} + ) +endif() # < Qt 6.2 diff --git a/tests/auto/tracing/flamegraphview/TestFlameGraphView.qml b/tests/auto/tracing/flamegraphview/TestFlameGraphView.qml index 5b8d0cfc206..f1f2d67ec97 100644 --- a/tests/auto/tracing/flamegraphview/TestFlameGraphView.qml +++ b/tests/auto/tracing/flamegraphview/TestFlameGraphView.qml @@ -24,7 +24,7 @@ ****************************************************************************/ import QtCreator.TstTracingFlameGraphView 1.0 -import "../QtCreator/Tracing/" // TODO: Turn into module import when possible +import "../Tracing" // TODO: Turn into module import when possible FlameGraphView { id: root diff --git a/tests/auto/tracing/flamegraphview/flamegraphview.pro b/tests/auto/tracing/flamegraphview/flamegraphview.pro index 3ebd7682fb0..7bb4102e35f 100644 --- a/tests/auto/tracing/flamegraphview/flamegraphview.pro +++ b/tests/auto/tracing/flamegraphview/flamegraphview.pro @@ -6,5 +6,8 @@ include(../../qttest.pri) SOURCES += \ tst_flamegraphview.cpp +HEADERS += \ + testflamegraphmodel.h + RESOURCES += \ flamegraphview.qrc diff --git a/tests/auto/tracing/flamegraphview/flamegraphview.qbs b/tests/auto/tracing/flamegraphview/flamegraphview.qbs index c3331c7a6a7..0be52f5d7ab 100644 --- a/tests/auto/tracing/flamegraphview/flamegraphview.qbs +++ b/tests/auto/tracing/flamegraphview/flamegraphview.qbs @@ -9,6 +9,7 @@ TracingAutotest { Group { name: "Test sources" files: [ + "testflamegraphmodel.h", "tst_flamegraphview.cpp", "flamegraphview.qrc" ] } diff --git a/tests/auto/tracing/flamegraphview/flamegraphview.qrc b/tests/auto/tracing/flamegraphview/flamegraphview.qrc index 912864eacff..951c294936e 100644 --- a/tests/auto/tracing/flamegraphview/flamegraphview.qrc +++ b/tests/auto/tracing/flamegraphview/flamegraphview.qrc @@ -1,5 +1,5 @@ - + TestFlameGraphView.qml diff --git a/tests/auto/tracing/flamegraphview/testflamegraphmodel.h b/tests/auto/tracing/flamegraphview/testflamegraphmodel.h new file mode 100644 index 00000000000..b383b928f53 --- /dev/null +++ b/tests/auto/tracing/flamegraphview/testflamegraphmodel.h @@ -0,0 +1,93 @@ +/**************************************************************************** +** +** Copyright (C) 2021 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Creator. +** +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +****************************************************************************/ + +#pragma once + +#include +#include + +class TestFlameGraphModel : public QStandardItemModel +{ + Q_OBJECT +#if QT_VERSION >= QT_VERSION_CHECK(6, 2, 0) + QML_ELEMENT + QML_UNCREATABLE("use the context property") +#endif // Qt >= 6.2 +public: + enum Role { + TypeIdRole = Qt::UserRole + 1, + SizeRole, + SourceFileRole, + SourceLineRole, + SourceColumnRole, + DetailsTitleRole, + SummaryRole, + MaxRole + }; + Q_ENUM(Role) + + void fill() { + qreal sizeSum = 0; + for (int i = 1; i < 10; ++i) { + QStandardItem *item = new QStandardItem; + item->setData(i, SizeRole); + item->setData(100 / i, TypeIdRole); + item->setData("trara", SourceFileRole); + item->setData(20, SourceLineRole); + item->setData(10, SourceColumnRole); + item->setData("details", DetailsTitleRole); + item->setData("summary", SummaryRole); + + for (int j = 1; j < i; ++j) { + QStandardItem *item2 = new QStandardItem; + item2->setData(1, SizeRole); + item2->setData(100 / j, TypeIdRole); + item2->setData(1, SourceLineRole); + item2->setData("child", DetailsTitleRole); + item2->setData("childsummary", SummaryRole); + for (int k = 1; k < 10; ++k) { + QStandardItem *skipped = new QStandardItem; + skipped->setData(0.001, SizeRole); + skipped->setData(100 / k, TypeIdRole); + item2->appendRow(skipped); + } + item->appendRow(item2); + } + + appendRow(item); + sizeSum += i; + } + invisibleRootItem()->setData(sizeSum, SizeRole); + invisibleRootItem()->setData(9 * 20, SourceLineRole); + invisibleRootItem()->setData(9 * 10, SourceColumnRole); + } + + Q_INVOKABLE void gotoSourceLocation(const QString &file, int line, int column) + { + Q_UNUSED(file) + Q_UNUSED(line) + Q_UNUSED(column) + } +}; diff --git a/tests/auto/tracing/flamegraphview/tst_flamegraphview.cpp b/tests/auto/tracing/flamegraphview/tst_flamegraphview.cpp index e342dade151..6268dd92a10 100644 --- a/tests/auto/tracing/flamegraphview/tst_flamegraphview.cpp +++ b/tests/auto/tracing/flamegraphview/tst_flamegraphview.cpp @@ -23,76 +23,17 @@ ** ****************************************************************************/ +#include + #include #include #include #include -#include #include #include #include -class TestFlameGraphModel : public QStandardItemModel -{ - Q_OBJECT - Q_ENUMS(Role) -public: - enum Role { - TypeIdRole = Qt::UserRole + 1, - SizeRole, - SourceFileRole, - SourceLineRole, - SourceColumnRole, - DetailsTitleRole, - SummaryRole, - MaxRole - }; - - void fill() { - qreal sizeSum = 0; - for (int i = 1; i < 10; ++i) { - QStandardItem *item = new QStandardItem; - item->setData(i, SizeRole); - item->setData(100 / i, TypeIdRole); - item->setData("trara", SourceFileRole); - item->setData(20, SourceLineRole); - item->setData(10, SourceColumnRole); - item->setData("details", DetailsTitleRole); - item->setData("summary", SummaryRole); - - for (int j = 1; j < i; ++j) { - QStandardItem *item2 = new QStandardItem; - item2->setData(1, SizeRole); - item2->setData(100 / j, TypeIdRole); - item2->setData(1, SourceLineRole); - item2->setData("child", DetailsTitleRole); - item2->setData("childsummary", SummaryRole); - for (int k = 1; k < 10; ++k) { - QStandardItem *skipped = new QStandardItem; - skipped->setData(0.001, SizeRole); - skipped->setData(100 / k, TypeIdRole); - item2->appendRow(skipped); - } - item->appendRow(item2); - } - - appendRow(item); - sizeSum += i; - } - invisibleRootItem()->setData(sizeSum, SizeRole); - invisibleRootItem()->setData(9 * 20, SourceLineRole); - invisibleRootItem()->setData(9 * 10, SourceColumnRole); - } - - Q_INVOKABLE void gotoSourceLocation(const QString &file, int line, int column) - { - Q_UNUSED(file) - Q_UNUSED(line) - Q_UNUSED(column) - } -}; - class DummyTheme : public Utils::Theme { public: @@ -131,16 +72,16 @@ void tst_FlameGraphView::initTestCase() model.fill(); #if QT_VERSION < QT_VERSION_CHECK(6, 2, 0) qmlRegisterType("QtCreator.Tracing", 1, 0, "FlameGraph"); -#endif // Qt < 6.2 qmlRegisterUncreatableType( "QtCreator.TstTracingFlameGraphView", 1, 0, "TestFlameGraphModel", QLatin1String("use the context property")); - +#endif // Qt < 6.2 Timeline::TimelineTheme::setupTheme(widget.engine()); widget.rootContext()->setContextProperty(QStringLiteral("flameGraphModel"), &model); - widget.setSource(QUrl(QStringLiteral("qrc:/tracingtest/TestFlameGraphView.qml"))); + widget.setSource(QUrl(QStringLiteral( + "qrc:/QtCreator/TstTracingFlameGraphView/TestFlameGraphView.qml"))); widget.setResizeMode(QQuickWidget::SizeRootObjectToView); widget.setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);