diff options
author | Ulf Hermann <ulf.hermann@theqtcompany.com> | 2016-01-21 12:46:01 +0100 |
---|---|---|
committer | Eike Ziller <eike.ziller@theqtcompany.com> | 2016-01-22 14:06:16 +0000 |
commit | 9a77f5f429c88518793673e924bb81768796215c (patch) | |
tree | b62fa85ecd129087ed910640a620e36abac28909 /src/plugins/qmlprofilerextension/flamegraphview.cpp | |
parent | ed15f7067df9f25475915b2f69d6ff4140b926c6 (diff) | |
download | qt-creator-qp-master.tar.gz |
Prepare for merging into qtcreatorqp-master
Remove the licensechecker dependency, move everything into
src/plugins/qmlprofilerextension, and adapt the build system.
Change-Id: I58bf34ecd838514d02b5c50189cd8a5eb99793b0
Reviewed-by: Eike Ziller <eike.ziller@theqtcompany.com>
Diffstat (limited to 'src/plugins/qmlprofilerextension/flamegraphview.cpp')
-rw-r--r-- | src/plugins/qmlprofilerextension/flamegraphview.cpp | 116 |
1 files changed, 116 insertions, 0 deletions
diff --git a/src/plugins/qmlprofilerextension/flamegraphview.cpp b/src/plugins/qmlprofilerextension/flamegraphview.cpp new file mode 100644 index 0000000000..532f9718bb --- /dev/null +++ b/src/plugins/qmlprofilerextension/flamegraphview.cpp @@ -0,0 +1,116 @@ +/**************************************************************************** +** +** Copyright (C) 2016 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 "flamegraphview.h" +#include "flamegraph.h" + +#include <qmlprofiler/qmlprofilerconstants.h> +#include <qmlprofiler/qmlprofilertool.h> + +#include <QQmlContext> +#include <QVBoxLayout> +#include <QMenu> + +namespace QmlProfilerExtension { +namespace Internal { + +FlameGraphView::FlameGraphView(QWidget *parent, QmlProfiler::QmlProfilerModelManager *manager) : + QmlProfilerEventsView(parent), m_content(new QQuickWidget(this)), + m_model(new FlameGraphModel(manager, this)), m_isRestrictedToRange(false) +{ + setWindowTitle(QStringLiteral("Flamegraph")); + setObjectName(QStringLiteral("QmlProfilerFlamegraph")); + + qmlRegisterType<FlameGraph>("FlameGraph", 1, 0, "FlameGraph"); + qmlRegisterUncreatableType<FlameGraphModel>("FlameGraphModel", 1, 0, "FlameGraphModel", + QLatin1String("use the context property")); + + m_content->rootContext()->setContextProperty(QStringLiteral("flameGraphModel"), m_model); + m_content->setSource(QUrl(QStringLiteral("qrc:/FlameGraphView.qml"))); + m_content->setClearColor(QColor(0xdc, 0xdc, 0xdc)); + + m_content->setResizeMode(QQuickWidget::SizeRootObjectToView); + m_content->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); + QLayout *layout = new QVBoxLayout(this); + layout->setContentsMargins(0, 0, 0, 0); + layout->setSpacing(0); + layout->addWidget(m_content); + setLayout(layout); + + connect(m_content->rootObject(), SIGNAL(typeSelected(int)), + this, SIGNAL(typeSelected(int))); + connect(m_content->rootObject(), SIGNAL(gotoSourceLocation(QString,int,int)), + this, SIGNAL(gotoSourceLocation(QString,int,int))); +} + +void FlameGraphView::clear() +{ +} + +void FlameGraphView::restrictToRange(qint64 rangeStart, qint64 rangeEnd) +{ + m_isRestrictedToRange = (rangeStart != -1 || rangeEnd != -1); + m_model->loadData(rangeStart, rangeEnd); +} + +bool FlameGraphView::isRestrictedToRange() const +{ + return m_isRestrictedToRange; +} + +void FlameGraphView::selectByTypeId(int typeIndex) +{ + m_content->rootObject()->setProperty("selectedTypeId", typeIndex); +} + +void FlameGraphView::onVisibleFeaturesChanged(quint64 features) +{ + int rangeTypeMask = 0; + for (int rangeType = 0; rangeType < QmlDebug::MaximumRangeType; ++rangeType) { + if (features & (1 << QmlDebug::featureFromRangeType(QmlDebug::RangeType(rangeType)))) + rangeTypeMask |= (1 << rangeType); + } + m_content->rootObject()->setProperty("visibleRangeTypes", rangeTypeMask); +} + +void FlameGraphView::contextMenuEvent(QContextMenuEvent *ev) +{ + QMenu menu; + QAction *getGlobalStatsAction = 0; + + QPoint position = ev->globalPos(); + + menu.addActions(QmlProfiler::QmlProfilerTool::profilerContextMenuActions()); + menu.addSeparator(); + getGlobalStatsAction = menu.addAction(tr("Show Full Range")); + if (!isRestrictedToRange()) + getGlobalStatsAction->setEnabled(false); + + if (menu.exec(position) == getGlobalStatsAction) + emit showFullRange(); +} + +} +} |