diff options
author | Ulf Hermann <ulf.hermann@qt.io> | 2017-08-07 12:05:11 +0200 |
---|---|---|
committer | Ulf Hermann <ulf.hermann@qt.io> | 2017-08-07 11:50:19 +0000 |
commit | 1e781cd396ce78995677a530ca4d788c737dc877 (patch) | |
tree | 1db7abd88559b0cba7fafe5c5382110ab50b27b7 | |
parent | 48d3fd1af578c03657e74ecba09430ac00683b4e (diff) |
QmlProfiler: Avoid empty timeline when restricting to ranges
The timeline models were suspended for editing but never restored. To
test the correct behavior a test case for the trace view is added.
Change-Id: Ic1803e9d84656eed97795f1f1674e3d56c83f650
Task-number: QTCREATORBUG-18354
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
-rw-r--r-- | src/plugins/qmlprofiler/qmlprofiler.qbs | 1 | ||||
-rw-r--r-- | src/plugins/qmlprofiler/qmlprofilerplugin.cpp | 2 | ||||
-rw-r--r-- | src/plugins/qmlprofiler/qmlprofilertraceview.cpp | 18 | ||||
-rw-r--r-- | src/plugins/qmlprofiler/qmlprofilertraceview.h | 1 | ||||
-rw-r--r-- | src/plugins/qmlprofiler/tests/qmlprofilertraceview_test.cpp | 67 | ||||
-rw-r--r-- | src/plugins/qmlprofiler/tests/qmlprofilertraceview_test.h | 51 | ||||
-rw-r--r-- | src/plugins/qmlprofiler/tests/tests.pri | 6 |
7 files changed, 139 insertions, 7 deletions
diff --git a/src/plugins/qmlprofiler/qmlprofiler.qbs b/src/plugins/qmlprofiler/qmlprofiler.qbs index 5202d0eb37..f8b659d05b 100644 --- a/src/plugins/qmlprofiler/qmlprofiler.qbs +++ b/src/plugins/qmlprofiler/qmlprofiler.qbs @@ -94,6 +94,7 @@ QtcPlugin { "qmlprofilerbindingloopsrenderpass_test.h", "qmlprofilerclientmanager_test.cpp", "qmlprofilerclientmanager_test.h", "qmlprofilerconfigwidget_test.cpp", "qmlprofilerconfigwidget_test.h", + "qmlprofilertraceview_test.cpp", "qmlprofilertraceview_test.h", ] } } diff --git a/src/plugins/qmlprofiler/qmlprofilerplugin.cpp b/src/plugins/qmlprofiler/qmlprofilerplugin.cpp index 123a84bd17..15dbe51e5f 100644 --- a/src/plugins/qmlprofiler/qmlprofilerplugin.cpp +++ b/src/plugins/qmlprofiler/qmlprofilerplugin.cpp @@ -47,6 +47,7 @@ #include "tests/qmlprofilerbindingloopsrenderpass_test.h" #include "tests/qmlprofilerclientmanager_test.h" #include "tests/qmlprofilerconfigwidget_test.h" +#include "tests/qmlprofilertraceview_test.h" // Force QML Debugging to be enabled, so that we can selftest the profiler #define QT_QML_DEBUG_NO_WARNING @@ -117,6 +118,7 @@ QList<QObject *> QmlProfiler::Internal::QmlProfilerPlugin::createTestObjects() c tests << new QmlProfilerBindingLoopsRenderPassTest; tests << new QmlProfilerClientManagerTest; tests << new QmlProfilerConfigWidgetTest; + tests << new QmlProfilerTraceViewTest; tests << new QQmlEngine; // Trigger debug connector to be started #endif diff --git a/src/plugins/qmlprofiler/qmlprofilertraceview.cpp b/src/plugins/qmlprofiler/qmlprofilertraceview.cpp index 8519d12422..acbff5eb93 100644 --- a/src/plugins/qmlprofiler/qmlprofilertraceview.cpp +++ b/src/plugins/qmlprofiler/qmlprofilertraceview.cpp @@ -114,13 +114,16 @@ QmlProfilerTraceView::QmlProfilerTraceView(QWidget *parent, QmlProfilerViewManag break; case QmlProfilerModelManager::ClearingData: d->m_zoomControl->clear(); - if (!d->m_suspendedModels.isEmpty()) - break; // Models are suspended already. AcquiringData was aborted. // Fall through case QmlProfilerModelManager::AcquiringData: - // Temporarily remove the models, while we're changing them - d->m_suspendedModels = d->m_modelProxy->models(); - d->m_modelProxy->setModels(QVariantList()); + if (d->m_suspendedModels.isEmpty()) { + // Temporarily remove the models, while we're changing them + d->m_suspendedModels = d->m_modelProxy->models(); + d->m_modelProxy->setModels(QVariantList()); + } + // Otherwise models are suspended already. This can happen if either acquiring was + // aborted or we're doing a "restrict to range" which consists of a partial clearing and + // then re-acquiring of data. break; } }); @@ -308,6 +311,11 @@ bool QmlProfilerTraceView::isUsable() const #endif } +bool QmlProfilerTraceView::isSuspended() const +{ + return !d->m_suspendedModels.isEmpty(); +} + void QmlProfilerTraceView::changeEvent(QEvent *e) { if (e->type() == QEvent::EnabledChange) { diff --git a/src/plugins/qmlprofiler/qmlprofilertraceview.h b/src/plugins/qmlprofiler/qmlprofilertraceview.h index 2cc81c8536..79063ac261 100644 --- a/src/plugins/qmlprofiler/qmlprofilertraceview.h +++ b/src/plugins/qmlprofiler/qmlprofilertraceview.h @@ -53,6 +53,7 @@ public: qint64 selectionEnd() const; void showContextMenu(QPoint position); bool isUsable() const; + bool isSuspended() const; public slots: void clear(); diff --git a/src/plugins/qmlprofiler/tests/qmlprofilertraceview_test.cpp b/src/plugins/qmlprofiler/tests/qmlprofilertraceview_test.cpp new file mode 100644 index 0000000000..a1ed887ce4 --- /dev/null +++ b/src/plugins/qmlprofiler/tests/qmlprofilertraceview_test.cpp @@ -0,0 +1,67 @@ +/**************************************************************************** +** +** Copyright (C) 2017 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. +** +****************************************************************************/ + +#include "qmlprofilertraceview_test.h" +#include <QtTest> + +namespace QmlProfiler { +namespace Internal { + +QmlProfilerTraceViewTest::QmlProfilerTraceViewTest(QObject *parent) : + QObject(parent), traceView(nullptr, nullptr, &modelManager) +{ +} + +void QmlProfilerTraceViewTest::testStateChanges() +{ + // Standard acquire-process-clear work flow + modelManager.startAcquiring(); + QVERIFY(traceView.isSuspended()); + modelManager.acquiringDone(); + QVERIFY(!traceView.isSuspended()); + modelManager.clear(); + QVERIFY(!traceView.isSuspended()); + + // Restrict to range + modelManager.startAcquiring(); + QVERIFY(traceView.isSuspended()); + modelManager.acquiringDone(); + QVERIFY(!traceView.isSuspended()); + modelManager.restrictToRange(10, 14); + QVERIFY(!traceView.isSuspended()); + modelManager.restrictToRange(-1, -1); + QVERIFY(!traceView.isSuspended()); + modelManager.clear(); + QVERIFY(!traceView.isSuspended()); + + // Abort Acquiring + modelManager.startAcquiring(); + QVERIFY(traceView.isSuspended()); + modelManager.clear(); + QVERIFY(!traceView.isSuspended()); +} + +} // namespace Internal +} // namespace QmlProfiler diff --git a/src/plugins/qmlprofiler/tests/qmlprofilertraceview_test.h b/src/plugins/qmlprofiler/tests/qmlprofilertraceview_test.h new file mode 100644 index 0000000000..e4edd01938 --- /dev/null +++ b/src/plugins/qmlprofiler/tests/qmlprofilertraceview_test.h @@ -0,0 +1,51 @@ +/**************************************************************************** +** +** Copyright (C) 2017 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 <qmlprofiler/qmlprofilermodelmanager.h> +#include <qmlprofiler/qmlprofilertraceview.h> + +#include <QObject> + +namespace QmlProfiler { +namespace Internal { + +class QmlProfilerTraceViewTest : public QObject +{ + Q_OBJECT +public: + explicit QmlProfilerTraceViewTest(QObject *parent = nullptr); + +private slots: + void testStateChanges(); + +private: + QmlProfilerModelManager modelManager; + QmlProfilerTraceView traceView; +}; + +} // namespace Internal +} // namespace QmlProfiler diff --git a/src/plugins/qmlprofiler/tests/tests.pri b/src/plugins/qmlprofiler/tests/tests.pri index 6d976a2716..feeda0cc40 100644 --- a/src/plugins/qmlprofiler/tests/tests.pri +++ b/src/plugins/qmlprofiler/tests/tests.pri @@ -14,7 +14,8 @@ SOURCES += \ $$PWD/qmlprofilerattachdialog_test.cpp \ $$PWD/qmlprofilerbindingloopsrenderpass_test.cpp \ $$PWD/qmlprofilerclientmanager_test.cpp \ - $$PWD/qmlprofilerconfigwidget_test.cpp + $$PWD/qmlprofilerconfigwidget_test.cpp \ + $$PWD/qmlprofilertraceview_test.cpp HEADERS += \ $$PWD/debugmessagesmodel_test.h \ @@ -32,4 +33,5 @@ HEADERS += \ $$PWD/qmlprofilerattachdialog_test.h \ $$PWD/qmlprofilerbindingloopsrenderpass_test.h \ $$PWD/qmlprofilerclientmanager_test.h \ - $$PWD/qmlprofilerconfigwidget_test.h + $$PWD/qmlprofilerconfigwidget_test.h \ + $$PWD/qmlprofilertraceview_test.h |