aboutsummaryrefslogtreecommitdiffstats
path: root/plugins/qmlprofiler/qv8profilereventview.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/qmlprofiler/qv8profilereventview.cpp')
-rw-r--r--plugins/qmlprofiler/qv8profilereventview.cpp725
1 files changed, 0 insertions, 725 deletions
diff --git a/plugins/qmlprofiler/qv8profilereventview.cpp b/plugins/qmlprofiler/qv8profilereventview.cpp
deleted file mode 100644
index fdc3ee9592..0000000000
--- a/plugins/qmlprofiler/qv8profilereventview.cpp
+++ /dev/null
@@ -1,725 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/legal
-**
-** 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 Digia. For licensing terms and
-** conditions see http://qt.digia.com/licensing. For further information
-** use the contact form at http://qt.digia.com/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Digia gives you certain additional
-** rights. These rights are described in the Digia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-****************************************************************************/
-
-#include "qv8profilereventview.h"
-
-#include <QUrl>
-#include <QHash>
-
-#include <QStandardItem>
-#include <QHeaderView>
-
-#include <QApplication>
-#include <QClipboard>
-
-#include <QContextMenuEvent>
-#include <QDebug>
-
-#include <coreplugin/minisplitter.h>
-#include <QVBoxLayout>
-#include <QHBoxLayout>
-
-#include "qmlprofilerviewmanager.h"
-#include "qmlprofilertool.h"
-#include "qv8profilerdatamodel.h"
-#include <QMenu>
-
-#include <utils/qtcassert.h>
-
-using namespace QmlDebug;
-
-namespace QmlProfiler {
-namespace Internal {
-
-enum ItemRole {
- EventHashStrRole = Qt::UserRole+1,
- FilenameRole = Qt::UserRole+2,
- LineRole = Qt::UserRole+3,
- ColumnRole = Qt::UserRole+4,
- EventIdRole = Qt::UserRole+5
-};
-
-////////////////////////////////////////////////////////////////////////////////////
-
-
-////////////////////////////////////////////////////////////////////////////////////
-
-class EventsViewItem : public QStandardItem
-{
-public:
- EventsViewItem(const QString &text) : QStandardItem(text) {}
-
- virtual bool operator<(const QStandardItem &other) const
- {
- if (data().type() == QVariant::String) {
- // first column
- if (column() == 0) {
- return data(FilenameRole).toString() == other.data(FilenameRole).toString() ?
- data(LineRole).toInt() < other.data(LineRole).toInt() :
- data(FilenameRole).toString() < other.data(FilenameRole).toString();
- } else {
- return data().toString().toLower() < other.data().toString().toLower();
- }
- }
-
- return data().toDouble() < other.data().toDouble();
- }
-};
-
-////////////////////////////////////////////////////////////////////////////////////
-
-class QV8ProfilerEventsWidget::QV8ProfilerEventsWidgetPrivate
-{
-public:
- QV8ProfilerEventsWidgetPrivate(QV8ProfilerEventsWidget *qq):q(qq) {}
- ~QV8ProfilerEventsWidgetPrivate() {}
-
- QV8ProfilerEventsWidget *q;
-
- Analyzer::IAnalyzerTool *m_profilerTool;
- QmlProfilerViewManager *m_viewContainer;
-
- QV8ProfilerEventsMainView *m_eventTree;
- QV8ProfilerEventRelativesView *m_eventChildren;
- QV8ProfilerEventRelativesView *m_eventParents;
-
- QV8ProfilerDataModel *v8Model;
-};
-
-QV8ProfilerEventsWidget::QV8ProfilerEventsWidget(QWidget *parent,
- Analyzer::IAnalyzerTool *profilerTool,
- QmlProfilerViewManager *container,
- QmlProfilerModelManager *profilerModelManager )
- : QWidget(parent), d(new QV8ProfilerEventsWidgetPrivate(this))
-{
- setObjectName(QLatin1String("QmlProfilerV8ProfileView"));
-
- d->v8Model = profilerModelManager->v8Model();
-
- d->m_eventTree = new QV8ProfilerEventsMainView(this, d->v8Model);
- connect(d->m_eventTree, SIGNAL(gotoSourceLocation(QString,int,int)), this, SIGNAL(gotoSourceLocation(QString,int,int)));
-
- d->m_eventChildren = new QV8ProfilerEventRelativesView(d->v8Model,
- QV8ProfilerEventRelativesView::ChildrenView,
- this);
- d->m_eventParents = new QV8ProfilerEventRelativesView(d->v8Model,
- QV8ProfilerEventRelativesView::ParentsView,
- this);
- connect(d->m_eventTree, SIGNAL(eventSelected(int)), d->m_eventChildren, SLOT(displayEvent(int)));
- connect(d->m_eventTree, SIGNAL(eventSelected(int)), d->m_eventParents, SLOT(displayEvent(int)));
- connect(d->m_eventChildren, SIGNAL(eventClicked(int)), d->m_eventTree, SLOT(selectEvent(int)));
- connect(d->m_eventParents, SIGNAL(eventClicked(int)), d->m_eventTree, SLOT(selectEvent(int)));
-
- // widget arrangement
- QVBoxLayout *groupLayout = new QVBoxLayout;
- groupLayout->setContentsMargins(0,0,0,0);
- groupLayout->setSpacing(0);
-
- Core::MiniSplitter *splitterVertical = new Core::MiniSplitter;
- splitterVertical->addWidget(d->m_eventTree);
- Core::MiniSplitter *splitterHorizontal = new Core::MiniSplitter;
- splitterHorizontal->addWidget(d->m_eventParents);
- splitterHorizontal->addWidget(d->m_eventChildren);
- splitterHorizontal->setOrientation(Qt::Horizontal);
- splitterVertical->addWidget(splitterHorizontal);
- splitterVertical->setOrientation(Qt::Vertical);
- splitterVertical->setStretchFactor(0,5);
- splitterVertical->setStretchFactor(1,2);
- groupLayout->addWidget(splitterVertical);
- setLayout(groupLayout);
-
- d->m_profilerTool = profilerTool;
- d->m_viewContainer = container;
-
-}
-
-QV8ProfilerEventsWidget::~QV8ProfilerEventsWidget()
-{
- delete d;
-}
-
-void QV8ProfilerEventsWidget::clear()
-{
- d->m_eventTree->clear();
- d->m_eventChildren->clear();
- d->m_eventParents->clear();
-}
-
-QModelIndex QV8ProfilerEventsWidget::selectedItem() const
-{
- return d->m_eventTree->selectedItem();
-}
-
-void QV8ProfilerEventsWidget::contextMenuEvent(QContextMenuEvent *ev)
-{
- QTC_ASSERT(d->m_viewContainer, return;);
-
- QMenu menu;
- QAction *copyRowAction = 0;
- QAction *copyTableAction = 0;
-
- QmlProfilerTool *profilerTool = qobject_cast<QmlProfilerTool *>(d->m_profilerTool);
- QPoint position = ev->globalPos();
-
- if (profilerTool) {
- QList <QAction *> commonActions = profilerTool->profilerContextMenuActions();
- foreach (QAction *act, commonActions) {
- menu.addAction(act);
- }
- }
-
- if (mouseOnTable(position)) {
- menu.addSeparator();
- if (selectedItem().isValid())
- copyRowAction = menu.addAction(QCoreApplication::translate("QmlProfiler::Internal::QmlProfilerEventsWidget", "Copy Row"));
- copyTableAction = menu.addAction(QCoreApplication::translate("QmlProfiler::Internal::QmlProfilerEventsWidget", "Copy Table"));
- }
-
- QAction *selectedAction = menu.exec(position);
-
- if (selectedAction) {
- if (selectedAction == copyRowAction)
- copyRowToClipboard();
- if (selectedAction == copyTableAction)
- copyTableToClipboard();
- }
-}
-
-void QV8ProfilerEventsWidget::resizeEvent(QResizeEvent *event)
-{
- QWidget::resizeEvent(event);
- emit resized();
-}
-
-bool QV8ProfilerEventsWidget::mouseOnTable(const QPoint &position) const
-{
- QPoint tableTopLeft = d->m_eventTree->mapToGlobal(QPoint(0,0));
- QPoint tableBottomRight = d->m_eventTree->mapToGlobal(QPoint(d->m_eventTree->width(), d->m_eventTree->height()));
- return (position.x() >= tableTopLeft.x() && position.x() <= tableBottomRight.x() && position.y() >= tableTopLeft.y() && position.y() <= tableBottomRight.y());
-}
-
-void QV8ProfilerEventsWidget::copyTableToClipboard() const
-{
- d->m_eventTree->copyTableToClipboard();
-}
-
-void QV8ProfilerEventsWidget::copyRowToClipboard() const
-{
- d->m_eventTree->copyRowToClipboard();
-}
-
-void QV8ProfilerEventsWidget::updateSelectedEvent(int eventId) const
-{
- if (d->m_eventTree->selectedEventId() != eventId)
- d->m_eventTree->selectEvent(eventId);
-}
-
-void QV8ProfilerEventsWidget::selectBySourceLocation(const QString &filename, int line, int column)
-{
- // This slot is used to connect the javascript pane with the qml events pane
- // Our javascript trace data does not store column information
- // thus we ignore it here
- Q_UNUSED(column);
- d->m_eventTree->selectEventByLocation(filename, line);
-}
-
-////////////////////////////////////////////////////////////////////////////////////
-
-class QV8ProfilerEventsMainView::QV8ProfilerEventsMainViewPrivate
-{
-public:
- QV8ProfilerEventsMainViewPrivate(QV8ProfilerEventsMainView *qq) : q(qq) {}
-
- void buildV8ModelFromList( const QList<QV8EventData *> &list );
- int getFieldCount();
-
- QString textForItem(QStandardItem *item, bool recursive) const;
-
-
- QV8ProfilerEventsMainView *q;
-
- QV8ProfilerDataModel *m_v8Model;
- QStandardItemModel *m_model;
- QList<bool> m_fieldShown;
- QHash<int, int> m_columnIndex; // maps field enum to column index
- int m_firstNumericColumn;
- bool m_preventSelectBounce;
-};
-
-
-////////////////////////////////////////////////////////////////////////////////////
-
-QV8ProfilerEventsMainView::QV8ProfilerEventsMainView(QWidget *parent,
- QV8ProfilerDataModel *v8Model)
-: QmlProfilerTreeView(parent), d(new QV8ProfilerEventsMainViewPrivate(this))
-{
- setObjectName(QLatin1String("QmlProfilerEventsTable"));
- setSortingEnabled(false);
-
- d->m_model = new QStandardItemModel(this);
- setModel(d->m_model);
- connect(this,SIGNAL(clicked(QModelIndex)), this,SLOT(jumpToItem(QModelIndex)));
-
- d->m_v8Model = v8Model;
- connect(d->m_v8Model, SIGNAL(changed()), this, SLOT(buildModel()));
- d->m_firstNumericColumn = 0;
- d->m_preventSelectBounce = false;
-
- setFieldViewable(Name, true);
- setFieldViewable(Type, false);
- setFieldViewable(TimeInPercent, true);
- setFieldViewable(TotalTime, true);
- setFieldViewable(SelfTimeInPercent, true);
- setFieldViewable(SelfTime, true);
- setFieldViewable(CallCount, false);
- setFieldViewable(TimePerCall, false);
- setFieldViewable(MaxTime, false);
- setFieldViewable(MinTime, false);
- setFieldViewable(MedianTime, false);
- setFieldViewable(Details, true);
-
- buildModel();
-}
-
-QV8ProfilerEventsMainView::~QV8ProfilerEventsMainView()
-{
- clear();
- delete d->m_model;
- delete d;
-}
-
-void QV8ProfilerEventsMainView::setFieldViewable(Fields field, bool show)
-{
- if (field < MaxFields) {
- int length = d->m_fieldShown.count();
- if (field >= length) {
- for (int i=length; i<MaxFields; i++)
- d->m_fieldShown << false;
- }
- d->m_fieldShown[field] = show;
- }
-}
-
-
-void QV8ProfilerEventsMainView::setHeaderLabels()
-{
- int fieldIndex = 0;
- d->m_firstNumericColumn = 0;
-
- d->m_columnIndex.clear();
- if (d->m_fieldShown[Name]) {
- d->m_columnIndex[Name] = fieldIndex;
- d->m_model->setHeaderData(fieldIndex++, Qt::Horizontal, QVariant(displayHeader(Location)));
- d->m_firstNumericColumn++;
- }
- if (d->m_fieldShown[Type]) {
- d->m_columnIndex[Type] = fieldIndex;
- d->m_model->setHeaderData(fieldIndex++, Qt::Horizontal, QVariant(displayHeader(Type)));
- d->m_firstNumericColumn++;
- }
- if (d->m_fieldShown[TimeInPercent]) {
- d->m_columnIndex[TimeInPercent] = fieldIndex;
- d->m_model->setHeaderData(fieldIndex++, Qt::Horizontal, QVariant(displayHeader(TimeInPercent)));
- }
- if (d->m_fieldShown[TotalTime]) {
- d->m_columnIndex[TotalTime] = fieldIndex;
- d->m_model->setHeaderData(fieldIndex++, Qt::Horizontal, QVariant(displayHeader(TotalTime)));
- }
- if (d->m_fieldShown[SelfTimeInPercent]) {
- d->m_columnIndex[Type] = fieldIndex;
- d->m_model->setHeaderData(fieldIndex++, Qt::Horizontal, QVariant(displayHeader(SelfTimeInPercent)));
- }
- if (d->m_fieldShown[SelfTime]) {
- d->m_columnIndex[SelfTime] = fieldIndex;
- d->m_model->setHeaderData(fieldIndex++, Qt::Horizontal, QVariant(displayHeader(SelfTime)));
- }
- if (d->m_fieldShown[CallCount]) {
- d->m_columnIndex[CallCount] = fieldIndex;
- d->m_model->setHeaderData(fieldIndex++, Qt::Horizontal, QVariant(displayHeader(CallCount)));
- }
- if (d->m_fieldShown[TimePerCall]) {
- d->m_columnIndex[TimePerCall] = fieldIndex;
- d->m_model->setHeaderData(fieldIndex++, Qt::Horizontal, QVariant(displayHeader(TimePerCall)));
- }
- if (d->m_fieldShown[MedianTime]) {
- d->m_columnIndex[MedianTime] = fieldIndex;
- d->m_model->setHeaderData(fieldIndex++, Qt::Horizontal, QVariant(displayHeader(MedianTime)));
- }
- if (d->m_fieldShown[MaxTime]) {
- d->m_columnIndex[MaxTime] = fieldIndex;
- d->m_model->setHeaderData(fieldIndex++, Qt::Horizontal, QVariant(displayHeader(MaxTime)));
- }
- if (d->m_fieldShown[MinTime]) {
- d->m_columnIndex[MinTime] = fieldIndex;
- d->m_model->setHeaderData(fieldIndex++, Qt::Horizontal, QVariant(displayHeader(MinTime)));
- }
- if (d->m_fieldShown[Details]) {
- d->m_columnIndex[Details] = fieldIndex;
- d->m_model->setHeaderData(fieldIndex++, Qt::Horizontal, QVariant(displayHeader(Details)));
- }
-}
-
-void QV8ProfilerEventsMainView::clear()
-{
- d->m_model->clear();
- d->m_model->setColumnCount(d->getFieldCount());
-
- setHeaderLabels();
- setSortingEnabled(false);
-}
-
-int QV8ProfilerEventsMainView::QV8ProfilerEventsMainViewPrivate::getFieldCount()
-{
- int count = 0;
- for (int i=0; i < m_fieldShown.count(); ++i)
- if (m_fieldShown[i])
- count++;
- return count;
-}
-
-void QV8ProfilerEventsMainView::buildModel()
-{
- clear();
- d->buildV8ModelFromList( d->m_v8Model->getV8Events() );
-
- setRootIsDecorated(false);
- setSortingEnabled(true);
- sortByColumn(d->m_firstNumericColumn,Qt::DescendingOrder);
-
- expandAll();
- if (d->m_fieldShown[Name])
- resizeColumnToContents(0);
-
- if (d->m_fieldShown[Type])
- resizeColumnToContents(d->m_fieldShown[Name]?1:0);
- collapseAll();
-}
-
-void QV8ProfilerEventsMainView::QV8ProfilerEventsMainViewPrivate::buildV8ModelFromList(const QList<QV8EventData *> &list)
-{
- for (int index = 0; index < list.count(); index++) {
- QV8EventData *v8event = list.at(index);
- QList<QStandardItem *> newRow;
-
- if (m_fieldShown[Name])
- newRow << new EventsViewItem(v8event->displayName);
-
- if (m_fieldShown[TimeInPercent]) {
- newRow << new EventsViewItem(QString::number(v8event->totalPercent,'f',2)+QLatin1String(" %"));
- newRow.last()->setData(QVariant(v8event->totalPercent));
- }
-
- if (m_fieldShown[TotalTime]) {
- newRow << new EventsViewItem(displayTime(v8event->totalTime));
- newRow.last()->setData(QVariant(v8event->totalTime));
- }
-
- if (m_fieldShown[SelfTimeInPercent]) {
- newRow << new EventsViewItem(QString::number(v8event->SelfTimeInPercent,'f',2)+QLatin1String(" %"));
- newRow.last()->setData(QVariant(v8event->SelfTimeInPercent));
- }
-
- if (m_fieldShown[SelfTime]) {
- newRow << new EventsViewItem(displayTime(v8event->selfTime));
- newRow.last()->setData(QVariant(v8event->selfTime));
- }
-
- if (m_fieldShown[Details]) {
- newRow << new EventsViewItem(v8event->functionName);
- newRow.last()->setData(QVariant(v8event->functionName));
- }
-
- if (!newRow.isEmpty()) {
- // no edit
- foreach (QStandardItem *item, newRow)
- item->setEditable(false);
-
- // metadata
- newRow.at(0)->setData(QString::fromLatin1("%1:%2").arg(v8event->filename, QString::number(v8event->line)), EventHashStrRole);
- newRow.at(0)->setData(QVariant(v8event->filename), FilenameRole);
- newRow.at(0)->setData(QVariant(v8event->line), LineRole);
- newRow.at(0)->setData(QVariant(-1),ColumnRole); // v8 events have no column info
- newRow.at(0)->setData(QVariant(v8event->eventId), EventIdRole);
-
- // append
- m_model->invisibleRootItem()->appendRow(newRow);
- }
- }
-}
-
-QString QV8ProfilerEventsMainView::displayTime(double time)
-{
- if (time < 1e6)
- return QString::number(time/1e3,'f',3) + trUtf8(" \xc2\xb5s");
- if (time < 1e9)
- return QString::number(time/1e6,'f',3) + tr(" ms");
-
- return QString::number(time/1e9,'f',3) + tr(" s");
-}
-
-QString QV8ProfilerEventsMainView::nameForType(int typeNumber)
-{
- switch (typeNumber) {
- case 0: return QV8ProfilerEventsMainView::tr("Paint");
- case 1: return QV8ProfilerEventsMainView::tr("Compile");
- case 2: return QV8ProfilerEventsMainView::tr("Create");
- case 3: return QV8ProfilerEventsMainView::tr("Binding");
- case 4: return QV8ProfilerEventsMainView::tr("Signal");
- }
- return QString();
-}
-
-int QV8ProfilerEventsMainView::selectedEventId() const
-{
- QModelIndex index = selectedItem();
- if (!index.isValid())
- return -1;
- QStandardItem *item = d->m_model->item(index.row(), 0);
- return item->data(EventIdRole).toInt();
-}
-
-void QV8ProfilerEventsMainView::jumpToItem(const QModelIndex &index)
-{
- if (d->m_preventSelectBounce)
- return;
-
- d->m_preventSelectBounce = true;
- QStandardItem *clickedItem = d->m_model->itemFromIndex(index);
- QStandardItem *infoItem;
- if (clickedItem->parent())
- infoItem = clickedItem->parent()->child(clickedItem->row(), 0);
- else
- infoItem = d->m_model->item(index.row(), 0);
-
- // show in editor
- int line = infoItem->data(LineRole).toInt();
- int column = infoItem->data(ColumnRole).toInt();
- QString fileName = infoItem->data(FilenameRole).toString();
- if (line!=-1 && !fileName.isEmpty())
- emit gotoSourceLocation(fileName, line, column);
-
- // show in callers/callees subwindow
- emit eventSelected(infoItem->data(EventIdRole).toInt());
-
- d->m_preventSelectBounce = false;
-}
-
-void QV8ProfilerEventsMainView::selectEvent(int eventId)
-{
- for (int i=0; i<d->m_model->rowCount(); i++) {
- QStandardItem *infoItem = d->m_model->item(i, 0);
- if (infoItem->data(EventIdRole).toInt() == eventId) {
- setCurrentIndex(d->m_model->indexFromItem(infoItem));
- jumpToItem(currentIndex());
- return;
- }
- }
-}
-
-void QV8ProfilerEventsMainView::selectEventByLocation(const QString &filename, int line)
-{
- if (d->m_preventSelectBounce)
- return;
-
- for (int i=0; i<d->m_model->rowCount(); i++) {
- QStandardItem *infoItem = d->m_model->item(i, 0);
- if (currentIndex() != d->m_model->indexFromItem(infoItem) &&
- infoItem->data(FilenameRole).toString() == filename &&
- infoItem->data(LineRole).toInt() == line) {
- setCurrentIndex(d->m_model->indexFromItem(infoItem));
- jumpToItem(currentIndex());
- return;
- }
- }
-}
-
-QModelIndex QV8ProfilerEventsMainView::selectedItem() const
-{
- QModelIndexList sel = selectedIndexes();
- if (sel.isEmpty())
- return QModelIndex();
- else
- return sel.first();
-}
-
-QString QV8ProfilerEventsMainView::QV8ProfilerEventsMainViewPrivate::textForItem(QStandardItem *item, bool recursive = true) const
-{
- QString str;
-
- if (recursive) {
- // indentation
- QStandardItem *itemParent = item->parent();
- while (itemParent) {
- str += QLatin1String(" ");
- itemParent = itemParent->parent();
- }
- }
-
- // item's data
- int colCount = m_model->columnCount();
- for (int j = 0; j < colCount; ++j) {
- QStandardItem *colItem = item->parent() ? item->parent()->child(item->row(),j) : m_model->item(item->row(),j);
- str += colItem->data(Qt::DisplayRole).toString();
- if (j < colCount-1) str += QLatin1Char('\t');
- }
- str += QLatin1Char('\n');
-
- // recursively print children
- if (recursive && item->child(0))
- for (int j = 0; j != item->rowCount(); j++)
- str += textForItem(item->child(j));
-
- return str;
-}
-
-void QV8ProfilerEventsMainView::copyTableToClipboard() const
-{
- QString str;
- // headers
- int columnCount = d->m_model->columnCount();
- for (int i = 0; i < columnCount; ++i) {
- str += d->m_model->headerData(i, Qt::Horizontal, Qt::DisplayRole).toString();
- if (i < columnCount - 1)
- str += QLatin1Char('\t');
- else
- str += QLatin1Char('\n');
- }
- // data
- int rowCount = d->m_model->rowCount();
- for (int i = 0; i != rowCount; ++i) {
- str += d->textForItem(d->m_model->item(i));
- }
- QClipboard *clipboard = QApplication::clipboard();
- clipboard->setText(str, QClipboard::Selection);
- clipboard->setText(str, QClipboard::Clipboard);
-}
-
-void QV8ProfilerEventsMainView::copyRowToClipboard() const
-{
- QString str;
- str = d->textForItem(d->m_model->itemFromIndex(selectedItem()), false);
-
- QClipboard *clipboard = QApplication::clipboard();
- clipboard->setText(str, QClipboard::Selection);
- clipboard->setText(str, QClipboard::Clipboard);
-}
-
-////////////////////////////////////////////////////////////////////////////////////
-
-QV8ProfilerEventRelativesView::QV8ProfilerEventRelativesView(QV8ProfilerDataModel *model,
- SubViewType viewType,
- QWidget *parent)
- : QmlProfilerTreeView(parent)
- , m_type(viewType)
- , m_v8Model(model)
- , m_model(new QStandardItemModel(this))
-{
- setModel(m_model);
-
- updateHeader();
- setSortingEnabled(false);
-
- connect(this, SIGNAL(clicked(QModelIndex)), this, SLOT(jumpToItem(QModelIndex)));
-}
-
-QV8ProfilerEventRelativesView::~QV8ProfilerEventRelativesView()
-{
-}
-
-void QV8ProfilerEventRelativesView::displayEvent(int index)
-{
- QV8EventData *event = m_v8Model->v8EventDescription(index);
- QTC_CHECK(event);
-
- QList<QV8EventSub*> events;
- if (m_type == ParentsView)
- events = event->parentHash.values();
- else
- events = event->childrenHash.values();
-
- rebuildTree(events);
-
- updateHeader();
- resizeColumnToContents(0);
- setSortingEnabled(true);
- sortByColumn(1);
-}
-
-void QV8ProfilerEventRelativesView::rebuildTree(QList<QV8EventSub*> events)
-{
- clear();
-
- QStandardItem *topLevelItem = m_model->invisibleRootItem();
-
- foreach (QV8EventSub *event, events) {
- QList<QStandardItem *> newRow;
- newRow << new EventsViewItem(event->reference->displayName);
- newRow << new EventsViewItem(QV8ProfilerEventsMainView::displayTime(event->totalTime));
- newRow << new EventsViewItem(event->reference->functionName);
- newRow.at(0)->setData(QVariant(event->reference->eventId), EventIdRole);
- newRow.at(1)->setData(QVariant(event->totalTime));
-
- foreach (QStandardItem *item, newRow)
- item->setEditable(false);
-
- topLevelItem->appendRow(newRow);
- }
-}
-
-void QV8ProfilerEventRelativesView::clear()
-{
- m_model->clear();
-}
-
-void QV8ProfilerEventRelativesView::updateHeader()
-{
- m_model->setColumnCount(3);
-
- int columnIndex = 0;
- if (m_type == ChildrenView)
- m_model->setHeaderData(columnIndex++, Qt::Horizontal, QVariant(displayHeader(Callee)));
- else
- m_model->setHeaderData(columnIndex++, Qt::Horizontal, QVariant(displayHeader(Caller)));
-
- m_model->setHeaderData(columnIndex++, Qt::Horizontal, QVariant(displayHeader(TotalTime)));
-
- if (m_type == ChildrenView)
- m_model->setHeaderData(columnIndex++, Qt::Horizontal, QVariant(displayHeader(CalleeDescription)));
- else
- m_model->setHeaderData(columnIndex++, Qt::Horizontal, QVariant(displayHeader(CallerDescription)));
-}
-
-void QV8ProfilerEventRelativesView::jumpToItem(const QModelIndex &index)
-{
- QStandardItem *infoItem = m_model->item(index.row(), 0);
- emit eventClicked(infoItem->data(EventIdRole).toInt());
-}
-
-} // namespace Internal
-} // namespace QmlProfiler