aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorUlf Hermann <ulf.hermann@theqtcompany.com>2015-11-13 18:03:23 +0100
committerUlf Hermann <ulf.hermann@theqtcompany.com>2015-11-17 13:12:09 +0000
commit8183d81c3e04234beb0e200897ad4dbe5d5c0ec6 (patch)
tree8817ddf6d4bf33f8c81ee7f3af92ab16f7216276
parent499ac6ba6f25a864a0a32cfdcc8c3b8c63795b34 (diff)
Add debug messages model
Change-Id: Ib62f1c6b2d1c28a3b4e06ee93cbc35d30074ce02 Reviewed-by: Joerg Bornemann <joerg.bornemann@theqtcompany.com>
-rw-r--r--plugins/qmlprofiler/debugmessagesmodel.cpp126
-rw-r--r--plugins/qmlprofiler/debugmessagesmodel.h61
-rw-r--r--plugins/qmlprofiler/qmlprofiler.pro6
-rw-r--r--plugins/qmlprofiler/qmlprofiler.qbs2
-rw-r--r--plugins/qmlprofiler/qmlprofilerextensionplugin.cpp4
5 files changed, 196 insertions, 3 deletions
diff --git a/plugins/qmlprofiler/debugmessagesmodel.cpp b/plugins/qmlprofiler/debugmessagesmodel.cpp
new file mode 100644
index 0000000000..246e7c32f2
--- /dev/null
+++ b/plugins/qmlprofiler/debugmessagesmodel.cpp
@@ -0,0 +1,126 @@
+/****************************************************************************
+**
+** Copyright (C) 2015 The Qt Company Ltd
+** All rights reserved.
+** For any questions to The Qt Company, please use contact form at http://www.qt.io/contact-us
+**
+** This file is part of the Qt Enterprise Qt Quick Profiler Add-on.
+**
+** Licensees holding valid Qt Enterprise licenses may use this file in
+** accordance with the Qt Enterprise License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company.
+**
+** If you have questions regarding the use of this file, please use
+** contact form at http://www.qt.io/contact-us
+**
+****************************************************************************/
+
+#include "debugmessagesmodel.h"
+
+using namespace QmlProfiler;
+
+namespace QmlProfilerExtension {
+namespace Internal {
+
+bool DebugMessagesModel::accepted(const QmlProfilerDataModel::QmlEventTypeData &event) const
+{
+ return event.message == QmlDebug::DebugMessage;
+}
+
+DebugMessagesModel::DebugMessagesModel(QmlProfilerModelManager *manager, QObject *parent) :
+ QmlProfilerTimelineModel(manager, QmlDebug::DebugMessage, QmlDebug::MaximumRangeType,
+ QmlDebug::ProfileDebugMessages, parent)
+{
+}
+
+int DebugMessagesModel::typeId(int index) const
+{
+ return m_data[index].typeId;
+}
+
+QColor DebugMessagesModel::color(int index) const
+{
+ return colorBySelectionId(index);
+}
+
+static const char *messageTypes[] = {
+ QT_TRANSLATE_NOOP("DebugMessagesModel", "Debug Message"),
+ QT_TRANSLATE_NOOP("DebugMessagesModel", "Warning Message"),
+ QT_TRANSLATE_NOOP("DebugMessagesModel", "Critical Message"),
+ QT_TRANSLATE_NOOP("DebugMessagesModel", "Fatal Message"),
+ QT_TRANSLATE_NOOP("DebugMessagesModel", "Info Message"),
+};
+
+QVariantList DebugMessagesModel::labels() const
+{
+ QVariantList result;
+
+ for (int i = QtDebugMsg; i <= QtInfoMsg; ++i) {
+ QVariantMap element;
+ element.insert(QLatin1String("description"), tr(messageTypes[i]));
+ element.insert(QLatin1String("id"), i);
+ result << element;
+ }
+ return result;
+}
+
+QVariantMap DebugMessagesModel::details(int index) const
+{
+ const QmlProfilerDataModel::QmlEventTypeData &type =
+ modelManager()->qmlModel()->getEventTypes()[m_data[index].typeId];
+
+ QVariantMap result;
+ result.insert(QLatin1String("displayName"), tr(messageTypes[type.detailType]));
+ result.insert(tr("Timestamp"), QmlProfilerDataModel::formatTime(startTime(index)));
+ result.insert(tr("Message"), m_data[index].text);
+ result.insert(tr("Location"), type.displayName);
+ return result;
+}
+
+int DebugMessagesModel::expandedRow(int index) const
+{
+ return selectionId(index) + 1;
+}
+
+int DebugMessagesModel::collapsedRow(int index) const
+{
+ Q_UNUSED(index);
+ return 1;
+}
+
+void DebugMessagesModel::loadData()
+{
+ QmlProfilerDataModel *simpleModel = modelManager()->qmlModel();
+ if (simpleModel->isEmpty())
+ return;
+
+ const QVector<QmlProfilerDataModel::QmlEventTypeData> &types = simpleModel->getEventTypes();
+
+ foreach (const QmlProfilerDataModel::QmlEventData &event, simpleModel->getEvents()) {
+ const QmlProfilerDataModel::QmlEventTypeData &type = types[event.typeIndex()];
+ if (!accepted(type) || event.startTime() < 0)
+ continue;
+
+ m_data.insert(insert(event.startTime(), 0, type.detailType),
+ MessageData(event.stringData(), event.typeIndex()));
+ updateProgress(count(), simpleModel->getEvents().count());
+ }
+ setCollapsedRowCount(2);
+ setExpandedRowCount(6); // 5 QtMsgTypes + 1
+ updateProgress(1, 1);
+}
+
+void DebugMessagesModel::clear()
+{
+ m_data.clear();
+ QmlProfilerTimelineModel::clear();
+}
+
+QVariantMap DebugMessagesModel::location(int index) const
+{
+ return locationFromTypeId(index);
+}
+
+}
+}
diff --git a/plugins/qmlprofiler/debugmessagesmodel.h b/plugins/qmlprofiler/debugmessagesmodel.h
new file mode 100644
index 0000000000..33629a1b95
--- /dev/null
+++ b/plugins/qmlprofiler/debugmessagesmodel.h
@@ -0,0 +1,61 @@
+/****************************************************************************
+**
+** Copyright (C) 2015 The Qt Company Ltd
+** All rights reserved.
+** For any questions to The Qt Company, please use contact form at http://www.qt.io/contact-us
+**
+** This file is part of the Qt Enterprise Qt Quick Profiler Add-on.
+**
+** Licensees holding valid Qt Enterprise licenses may use this file in
+** accordance with the Qt Enterprise License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company.
+**
+** If you have questions regarding the use of this file, please use
+** contact form at http://www.qt.io/contact-us
+**
+****************************************************************************/
+
+#ifndef DEBUGMESSAGESMODEL_H
+#define DEBUGMESSAGESMODEL_H
+
+#include "qmlprofiler/qmlprofilertimelinemodel.h"
+
+namespace QmlProfilerExtension {
+namespace Internal {
+
+class DebugMessagesModel : public QmlProfiler::QmlProfilerTimelineModel
+{
+ Q_OBJECT
+
+protected:
+ bool accepted(const QmlProfiler::QmlProfilerDataModel::QmlEventTypeData &event) const;
+
+public:
+ DebugMessagesModel(QmlProfiler::QmlProfilerModelManager *manager, QObject *parent = 0);
+
+ int typeId(int index) const override;
+ QColor color(int index) const override;
+ QVariantList labels() const override;
+ QVariantMap details(int index) const override;
+ int expandedRow(int index) const override;
+ int collapsedRow(int index) const override;
+ void loadData() override;
+ void clear() override;
+ QVariantMap location(int index) const override;
+
+private:
+ struct MessageData {
+ MessageData(const QString &text = QString(), int typeId = -1) :
+ text(text), typeId(typeId) {}
+ QString text;
+ int typeId;
+ };
+
+ QVector<MessageData> m_data;
+};
+
+}
+}
+
+#endif // DEBUGMESSAGESMODEL_H
diff --git a/plugins/qmlprofiler/qmlprofiler.pro b/plugins/qmlprofiler/qmlprofiler.pro
index bf841816ae..7fa6b03163 100644
--- a/plugins/qmlprofiler/qmlprofiler.pro
+++ b/plugins/qmlprofiler/qmlprofiler.pro
@@ -13,7 +13,8 @@ SOURCES += qmlprofilerextensionplugin.cpp \
scenegraphtimelinemodel.cpp \
pixmapcachemodel.cpp \
memoryusagemodel.cpp \
- inputeventsmodel.cpp
+ inputeventsmodel.cpp \
+ debugmessagesmodel.cpp
HEADERS += qmlprofilerextensionplugin.h \
qmlprofilerextension_global.h \
@@ -21,7 +22,8 @@ HEADERS += qmlprofilerextensionplugin.h \
scenegraphtimelinemodel.h \
pixmapcachemodel.h \
memoryusagemodel.h \
- inputeventsmodel.h
+ inputeventsmodel.h \
+ debugmessagesmodel.h
OTHER_FILES += \
QmlProfilerExtension.json.in
diff --git a/plugins/qmlprofiler/qmlprofiler.qbs b/plugins/qmlprofiler/qmlprofiler.qbs
index 7105207e1e..8c16895a72 100644
--- a/plugins/qmlprofiler/qmlprofiler.qbs
+++ b/plugins/qmlprofiler/qmlprofiler.qbs
@@ -10,6 +10,8 @@ QtcCommercialPlugin {
Depends { name: "Qt.widgets" }
files: [
+ "debugmessagesmodel.cpp",
+ "debugmessagesmodel.h",
"inputeventsmodel.cpp",
"inputeventsmodel.h",
"memoryusagemodel.cpp",
diff --git a/plugins/qmlprofiler/qmlprofilerextensionplugin.cpp b/plugins/qmlprofiler/qmlprofilerextensionplugin.cpp
index 0015b02f97..b4ab349d05 100644
--- a/plugins/qmlprofiler/qmlprofilerextensionplugin.cpp
+++ b/plugins/qmlprofiler/qmlprofilerextensionplugin.cpp
@@ -45,6 +45,7 @@
#include "pixmapcachemodel.h"
#include "memoryusagemodel.h"
#include "inputeventsmodel.h"
+#include "debugmessagesmodel.h"
using namespace QmlProfilerExtension::Internal;
@@ -58,7 +59,8 @@ public:
models << new PixmapCacheModel(manager, this)
<< new SceneGraphTimelineModel(manager, this)
<< new MemoryUsageModel(manager, this)
- << new InputEventsModel(manager, this);
+ << new InputEventsModel(manager, this)
+ << new DebugMessagesModel(manager, this);
return models;
}
};