From 9a77f5f429c88518793673e924bb81768796215c Mon Sep 17 00:00:00 2001 From: Ulf Hermann Date: Thu, 21 Jan 2016 12:46:01 +0100 Subject: Prepare for merging into qtcreator Remove the licensechecker dependency, move everything into src/plugins/qmlprofilerextension, and adapt the build system. Change-Id: I58bf34ecd838514d02b5c50189cd8a5eb99793b0 Reviewed-by: Eike Ziller --- src/plugins/qmlprofilerextension/flamegraph.h | 160 ++++++++++++++++++++++++++ 1 file changed, 160 insertions(+) create mode 100644 src/plugins/qmlprofilerextension/flamegraph.h (limited to 'src/plugins/qmlprofilerextension/flamegraph.h') diff --git a/src/plugins/qmlprofilerextension/flamegraph.h b/src/plugins/qmlprofilerextension/flamegraph.h new file mode 100644 index 0000000000..d4b444fc87 --- /dev/null +++ b/src/plugins/qmlprofilerextension/flamegraph.h @@ -0,0 +1,160 @@ +/**************************************************************************** +** +** 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. +** +****************************************************************************/ + +#ifndef FLAMEGRAPH_H +#define FLAMEGRAPH_H + +#include +#include + +namespace QmlProfilerExtension { +namespace Internal { + +class FlameGraphAttached : public QObject +{ + Q_OBJECT + Q_PROPERTY(qreal relativeSize READ relativeSize WRITE setRelativeSize + NOTIFY relativeSizeChanged) + Q_PROPERTY(qreal relativePosition READ relativePosition WRITE setRelativePosition + NOTIFY relativePositionChanged) + Q_PROPERTY(bool dataValid READ isDataValid NOTIFY dataValidChanged) + +public: + FlameGraphAttached(QObject *parent = 0) : + QObject(parent), m_relativeSize(0), m_relativePosition(0) {} + + Q_INVOKABLE QVariant data(int role) const; + + bool isDataValid() const + { + return m_data.isValid(); + } + + qreal relativeSize() const + { + return m_relativeSize; + } + + void setRelativeSize(qreal relativeSize) + { + if (relativeSize != m_relativeSize) { + m_relativeSize = relativeSize; + emit relativeSizeChanged(); + } + } + + qreal relativePosition() const + { + return m_relativePosition; + } + + void setRelativePosition(qreal relativePosition) + { + if (relativePosition != m_relativePosition) { + m_relativePosition = relativePosition; + emit relativePositionChanged(); + } + } + + void setModelIndex(const QModelIndex &data) + { + if (data != m_data) { + bool validChanged = (data.isValid() != m_data.isValid()); + m_data = data; + if (validChanged) + emit dataValidChanged(); + emit dataChanged(); + } + } + +signals: + void dataChanged(); + void dataValidChanged(); + void relativeSizeChanged(); + void relativePositionChanged(); + +private: + QPersistentModelIndex m_data; + qreal m_relativeSize; + qreal m_relativePosition; +}; + +class FlameGraph : public QQuickItem +{ + Q_OBJECT + Q_PROPERTY(QQmlComponent* delegate READ delegate WRITE setDelegate NOTIFY delegateChanged) + Q_PROPERTY(QAbstractItemModel* model READ model WRITE setModel NOTIFY modelChanged) + Q_PROPERTY(int sizeRole READ sizeRole WRITE setSizeRole NOTIFY sizeRoleChanged) + Q_PROPERTY(qreal sizeThreshold READ sizeThreshold WRITE setSizeThreshold + NOTIFY sizeThresholdChanged) + Q_PROPERTY(int depth READ depth NOTIFY depthChanged) + +public: + FlameGraph(QQuickItem *parent = 0); + + QQmlComponent *delegate() const; + void setDelegate(QQmlComponent *delegate); + + QAbstractItemModel *model() const; + void setModel(QAbstractItemModel *model); + + int sizeRole() const; + void setSizeRole(int sizeRole); + + qreal sizeThreshold() const; + void setSizeThreshold(qreal sizeThreshold); + + int depth() const; + + static FlameGraphAttached *qmlAttachedProperties(QObject *object); + +signals: + void delegateChanged(QQmlComponent *delegate); + void modelChanged(QAbstractItemModel *model); + void sizeRoleChanged(int role); + void sizeThresholdChanged(qreal threshold); + void depthChanged(int depth); + +private slots: + void rebuild(); + +private: + QQmlComponent *m_delegate; + QAbstractItemModel *m_model; + int m_sizeRole; + int m_depth; + qreal m_sizeThreshold; + + int buildNode(const QModelIndex &parentIndex, QObject *parentObject, int depth); + QObject *appendChild(QObject *parentObject, QQuickItem *parentItem, QQmlContext *context, + const QModelIndex &childIndex, qreal position, qreal size); +}; + +} +} + +QML_DECLARE_TYPEINFO(QmlProfilerExtension::Internal::FlameGraph, QML_HAS_ATTACHED_PROPERTIES) + +#endif // FLAMEGRAPH_H -- cgit v1.2.3