Tracing: Add a manual test

A minimal application that displays the tracing view with some dummy
data.

Change-Id: Ie564a3be017731313659aef7958138613b0bb94d
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
This commit is contained in:
Alessandro Portale
2021-05-10 20:04:30 +02:00
parent 3f31cd654d
commit aabb6d3539
5 changed files with 202 additions and 0 deletions

View File

@@ -1,3 +1,4 @@
add_subdirectory(crumblepath)
add_subdirectory(infolabel)
add_subdirectory(manhattanstyle)
add_subdirectory(tracing)

View File

@@ -0,0 +1,9 @@
add_qtc_executable(tst_manual_widgets_tracing
CONDITION TARGET Tracing
DEPENDS Tracing Utils Core Qt5::Gui Qt5::Quick
SOURCES
tst_manual_widgets_tracing.cpp
../common/themeselector.cpp ../common/themeselector.h
../common/themes.qrc
PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
)

View File

@@ -0,0 +1,16 @@
import "../common/common.qbs" as Common
CppApplication {
name: "Manual Test Tracing"
Depends { name: "Qt.quick" }
Depends { name: "Tracing" }
Depends { name: "Utils" }
Depends { name: "Core" }
files: [
"tst_manual_widgets_tracing.cpp",
]
Common {}
}

View File

@@ -0,0 +1,175 @@
/****************************************************************************
**
** 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.
**
****************************************************************************/
#include <QApplication>
#include <QQuickView>
#include <QQmlContext>
#include <tracing/timelinerenderer.h>
#include <tracing/timelineoverviewrenderer.h>
#include <tracing/timelinemodelaggregator.h>
#include <tracing/timelinetheme.h>
#include <tracing/timelineformattime.h>
#include <tracing/timelinezoomcontrol.h>
#include "../common/themeselector.h"
using namespace Timeline;
static const qint64 oneMs = 1000 * 1000; // in nanoseconds
class DummyModel : public Timeline::TimelineModel
{
public:
DummyModel(TimelineModelAggregator *parent)
: TimelineModel(parent)
{
setDisplayName("Dummy Category");
setCollapsedRowCount(1);
setExpandedRowCount(3);
setTooltip("This is a tool tip"); // Tooltip on the title on the left
setCategoryColor(Qt::yellow);
}
QRgb color(int index) const override
{
return QColor::fromHsl(index * 20, 96, 128).rgb(); // Red to green
}
// Called when a range gets selected, requests index of row which a range belongs to
int expandedRow(int index) const override
{
return selectionId(index) % expandedRowCount(); // Distribute selections among rows
}
// Called when the category gets expanded
QVariantList labels() const override
{
QVariantList result;
QVariantMap element;
element.insert(QLatin1String("description"), QVariant("Dummy sub category 1"));
element.insert(QLatin1String("id"), 0);
result << element;
element.clear();
element.insert(QLatin1String("description"), QVariant("Dummy sub category 2"));
element.insert(QLatin1String("id"), 1);
result << element;
return result;
}
// Called when a range (or track) is selected
QVariantMap details(int index) const override
{
QVariantMap result;
result.insert(QLatin1String("displayName"),
QString::fromLatin1("Details for range %1").arg(index));
result.insert(QLatin1String("Foo A"), QString::fromLatin1("Bar %1a").arg(index));
result.insert(QLatin1String("Foo B"), QString::fromLatin1("Bar %1b").arg(index));
return result;
}
float relativeHeight(int index) const override
{
return 1.0 - (index / 10.0); // Shrink over time
}
void populateData()
{
// One region per selection
insert(oneMs * 20, oneMs * 20, 0);
insert(oneMs * 100, oneMs * 30, 1);
// Two regions in the same selection
insert(oneMs * 40, oneMs * 20, 2);
insert(oneMs * 120, oneMs * 30, 2);
// Three regions in the same selection
insert(oneMs * 60, oneMs * 30, 3);
insert(oneMs * 140, oneMs * 20, 3);
insert(oneMs * 170, oneMs * 20, 3);
emit contentChanged();
}
};
class TraceView : public QQuickView
{
public:
TraceView(QWindow *parent = 0)
: QQuickView(parent)
{
setResizeMode(QQuickView::SizeRootObjectToView);
qmlRegisterType<TimelineRenderer>("TimelineRenderer", 1, 0, "TimelineRenderer");
qmlRegisterType<TimelineOverviewRenderer>(
"TimelineOverviewRenderer", 1, 0, "TimelineOverviewRenderer");
qmlRegisterAnonymousType<TimelineZoomControl>("TimelineZoomControl", 1);
qmlRegisterAnonymousType<TimelineModel>("TimelineModel", 1);
qmlRegisterAnonymousType<TimelineNotesModel>("TimelineNotesModel", 1);
TimelineTheme::setupTheme(engine());
TimeFormatter::setupTimeFormatter();
m_modelAggregator = new TimelineModelAggregator(this);
m_model = new DummyModel(m_modelAggregator);
m_model->populateData();
m_modelAggregator->setModels({QVariant::fromValue(m_model)});
rootContext()->setContextProperty(QLatin1String("timelineModelAggregator"),
m_modelAggregator);
m_zoomControl = new TimelineZoomControl(this);
m_zoomControl->setTrace(0, oneMs * 1000); // Total timeline length
rootContext()->setContextProperty("zoomControl", m_zoomControl);
setSource(QUrl(QLatin1String("qrc:/tracing/MainView.qml")));
// Zoom onto first timeline third. Needs to be done after loading setSource.
m_zoomControl->setRange(0, oneMs * 1000 / 3.0);
}
~TraceView() override = default;
DummyModel *m_model;
TimelineModelAggregator *m_modelAggregator;
TimelineZoomControl *m_zoomControl;
};
int main(int argc, char *argv[])
{
QApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
QApplication::setAttribute(Qt::AA_UseHighDpiPixmaps);
QApplication app(argc, argv);
ManualTest::ThemeSelector::setTheme(":/themes/flat.creatortheme");
auto view = new TraceView;
view->resize(700, 300);
view->show();
return app.exec();
}

View File

@@ -9,5 +9,6 @@ Project {
"crumblepath/crumblepath.qbs",
"infolabel/infolabel.qbs",
"manhattanstyle/manhattanstyle.qbs",
"tracing/tracing.qbs",
]
}