diff options
author | Ulf Hermann <ulf.hermann@theqtcompany.com> | 2015-11-13 18:03:23 +0100 |
---|---|---|
committer | Ulf Hermann <ulf.hermann@theqtcompany.com> | 2015-11-17 13:12:09 +0000 |
commit | 8183d81c3e04234beb0e200897ad4dbe5d5c0ec6 (patch) | |
tree | 8817ddf6d4bf33f8c81ee7f3af92ab16f7216276 | |
parent | 499ac6ba6f25a864a0a32cfdcc8c3b8c63795b34 (diff) |
Add debug messages model
Change-Id: Ib62f1c6b2d1c28a3b4e06ee93cbc35d30074ce02
Reviewed-by: Joerg Bornemann <joerg.bornemann@theqtcompany.com>
-rw-r--r-- | plugins/qmlprofiler/debugmessagesmodel.cpp | 126 | ||||
-rw-r--r-- | plugins/qmlprofiler/debugmessagesmodel.h | 61 | ||||
-rw-r--r-- | plugins/qmlprofiler/qmlprofiler.pro | 6 | ||||
-rw-r--r-- | plugins/qmlprofiler/qmlprofiler.qbs | 2 | ||||
-rw-r--r-- | plugins/qmlprofiler/qmlprofilerextensionplugin.cpp | 4 |
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; } }; |