summaryrefslogtreecommitdiff
path: root/src/plugins/qmlprofiler/qmlprofilereventview.cpp
diff options
context:
space:
mode:
authorChristiaan Janssen <christiaan.janssen@nokia.com>2011-09-27 14:38:22 +0200
committerChristiaan Janssen <christiaan.janssen@nokia.com>2011-10-07 17:19:50 +0200
commita26259997c966b4fcc8013589ebbfdc313323520 (patch)
tree24b3b18b565302ad7eace7c5f4c3b11275cdd822 /src/plugins/qmlprofiler/qmlprofilereventview.cpp
parent9057d87805abfa5dc412f53c2a9a12704ff7aab9 (diff)
downloadqt-creator-a26259997c966b4fcc8013589ebbfdc313323520.tar.gz
QmlProfiler: V8 profiling
Change-Id: I926c5821d31453064f5dbed2b5a10f6195761f42 Reviewed-on: http://codereview.qt-project.org/5892 Reviewed-by: Kai Koehne <kai.koehne@nokia.com> Sanity-Review: Qt Sanity Bot <qt_sanity_bot@ovi.com>
Diffstat (limited to 'src/plugins/qmlprofiler/qmlprofilereventview.cpp')
-rw-r--r--src/plugins/qmlprofiler/qmlprofilereventview.cpp96
1 files changed, 93 insertions, 3 deletions
diff --git a/src/plugins/qmlprofiler/qmlprofilereventview.cpp b/src/plugins/qmlprofiler/qmlprofilereventview.cpp
index a9ee3a1a63..b13a4af71b 100644
--- a/src/plugins/qmlprofiler/qmlprofilereventview.cpp
+++ b/src/plugins/qmlprofiler/qmlprofilereventview.cpp
@@ -83,6 +83,7 @@ public:
QmlProfilerEventsViewPrivate(QmlProfilerEventsView *qq) : q(qq) {}
void buildModelFromList(const QmlEventDescriptions &list, QStandardItem *parentItem, const QmlEventDescriptions &visitedFunctionsList = QmlEventDescriptions() );
+ void buildV8ModelFromList( const QV8EventDescriptions &list );
int getFieldCount();
QString displayTime(double time) const;
QString nameForType(int typeNumber) const;
@@ -92,6 +93,7 @@ public:
QmlProfilerEventsView *q;
+ QmlProfilerEventsView::ViewTypes m_viewType;
QmlProfilerEventList *m_eventStatistics;
QStandardItemModel *m_model;
QList<bool> m_fieldShown;
@@ -137,7 +139,8 @@ void QmlProfilerEventsView::setEventStatisticsModel( QmlProfilerEventList *model
if (d->m_eventStatistics)
disconnect(d->m_eventStatistics,SIGNAL(dataReady()),this,SLOT(buildModel()));
d->m_eventStatistics = model;
- connect(d->m_eventStatistics,SIGNAL(dataReady()),this,SLOT(buildModel()));
+ if (model)
+ connect(d->m_eventStatistics,SIGNAL(dataReady()),this,SLOT(buildModel()));
}
void QmlProfilerEventsView::setFieldViewable(Fields field, bool show)
@@ -154,6 +157,7 @@ void QmlProfilerEventsView::setFieldViewable(Fields field, bool show)
void QmlProfilerEventsView::setViewType(ViewTypes type)
{
+ d->m_viewType = type;
switch (type) {
case EventsView: {
setObjectName("QmlProfilerEventsView");
@@ -161,15 +165,18 @@ void QmlProfilerEventsView::setViewType(ViewTypes type)
setFieldViewable(Type, true);
setFieldViewable(Percent, true);
setFieldViewable(TotalDuration, true);
+ setFieldViewable(SelfPercent, false);
+ setFieldViewable(SelfDuration, false);
setFieldViewable(CallCount, true);
setFieldViewable(TimePerCall, true);
setFieldViewable(MaxTime, true);
setFieldViewable(MinTime, true);
setFieldViewable(MedianTime, true);
- setFieldViewable(Details, false);
+ setFieldViewable(Details, true);
setFieldViewable(Parents, false);
setFieldViewable(Children, false);
setShowAnonymousEvents(false);
+ setToolTip(QString());
break;
}
case CallersView: {
@@ -178,6 +185,8 @@ void QmlProfilerEventsView::setViewType(ViewTypes type)
setFieldViewable(Type, true);
setFieldViewable(Percent, false);
setFieldViewable(TotalDuration, false);
+ setFieldViewable(SelfPercent, false);
+ setFieldViewable(SelfDuration, false);
setFieldViewable(CallCount, false);
setFieldViewable(TimePerCall, false);
setFieldViewable(MaxTime, false);
@@ -187,6 +196,7 @@ void QmlProfilerEventsView::setViewType(ViewTypes type)
setFieldViewable(Parents, true);
setFieldViewable(Children, false);
setShowAnonymousEvents(true);
+ setToolTip(QString());
break;
}
case CalleesView: {
@@ -195,6 +205,8 @@ void QmlProfilerEventsView::setViewType(ViewTypes type)
setFieldViewable(Type, true);
setFieldViewable(Percent, false);
setFieldViewable(TotalDuration, false);
+ setFieldViewable(SelfPercent, false);
+ setFieldViewable(SelfDuration, false);
setFieldViewable(CallCount, false);
setFieldViewable(TimePerCall, false);
setFieldViewable(MaxTime, false);
@@ -204,6 +216,27 @@ void QmlProfilerEventsView::setViewType(ViewTypes type)
setFieldViewable(Parents, false);
setFieldViewable(Children, true);
setShowAnonymousEvents(true);
+ setToolTip(QString());
+ break;
+ }
+ case V8ProfileView: {
+ setObjectName("QmlProfilerV8ProfileView");
+ setFieldViewable(Name, true);
+ setFieldViewable(Type, false);
+ setFieldViewable(Percent, true);
+ setFieldViewable(TotalDuration, true);
+ setFieldViewable(SelfPercent, true);
+ setFieldViewable(SelfDuration, true);
+ setFieldViewable(CallCount, false);
+ setFieldViewable(TimePerCall, false);
+ setFieldViewable(MaxTime, false);
+ setFieldViewable(MinTime, false);
+ setFieldViewable(MedianTime, false);
+ setFieldViewable(Details, true);
+ setFieldViewable(Parents, false);
+ setFieldViewable(Children, false);
+ setShowAnonymousEvents(true);
+ setToolTip(tr("Trace information from the v8 JavaScript engine. Available only in Qt5 based applications"));
break;
}
default: break;
@@ -234,6 +267,10 @@ void QmlProfilerEventsView::setHeaderLabels()
d->m_model->setHeaderData(fieldIndex++, Qt::Horizontal, QVariant(tr("Time in Percent")));
if (d->m_fieldShown[TotalDuration])
d->m_model->setHeaderData(fieldIndex++, Qt::Horizontal, QVariant(tr("Total Time")));
+ if (d->m_fieldShown[SelfPercent])
+ d->m_model->setHeaderData(fieldIndex++, Qt::Horizontal, QVariant(tr("Self Time in Percent")));
+ if (d->m_fieldShown[SelfDuration])
+ d->m_model->setHeaderData(fieldIndex++, Qt::Horizontal, QVariant(tr("Self Time")));
if (d->m_fieldShown[CallCount])
d->m_model->setHeaderData(fieldIndex++, Qt::Horizontal, QVariant(tr("Calls")));
if (d->m_fieldShown[TimePerCall])
@@ -270,7 +307,10 @@ void QmlProfilerEventsView::buildModel()
{
if (d->m_eventStatistics) {
clear();
- d->buildModelFromList( d->m_eventStatistics->getEventDescriptions(), d->m_model->invisibleRootItem() );
+ if (d->m_viewType == V8ProfileView)
+ d->buildV8ModelFromList( d->m_eventStatistics->getV8Events() );
+ else
+ d->buildModelFromList( d->m_eventStatistics->getEventDescriptions(), d->m_model->invisibleRootItem() );
bool hasBranches = d->m_fieldShown[Parents] || d->m_fieldShown[Children];
setRootIsDecorated(hasBranches);
@@ -381,6 +421,56 @@ void QmlProfilerEventsView::QmlProfilerEventsViewPrivate::buildModelFromList( co
}
}
+void QmlProfilerEventsView::QmlProfilerEventsViewPrivate::buildV8ModelFromList(const QV8EventDescriptions &list)
+{
+ foreach (QV8EventData *v8event, list) {
+
+ QList<QStandardItem *> newRow;
+
+ if (m_fieldShown[Name]) {
+ newRow << new EventsViewItem(v8event->displayName);
+ }
+
+ if (m_fieldShown[Percent]) {
+ newRow << new EventsViewItem(QString::number(v8event->totalPercent,'f',2)+QLatin1String(" %"));
+ newRow.last()->setData(QVariant(v8event->totalPercent));
+ }
+
+ if (m_fieldShown[TotalDuration]) {
+ newRow << new EventsViewItem(displayTime(v8event->totalTime));
+ newRow.last()->setData(QVariant(v8event->totalTime));
+ }
+
+ if (m_fieldShown[SelfPercent]) {
+ newRow << new EventsViewItem(QString::number(v8event->selfPercent,'f',2)+QLatin1String(" %"));
+ newRow.last()->setData(QVariant(v8event->selfPercent));
+ }
+
+ if (m_fieldShown[SelfDuration]) {
+ 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(QVariant(v8event->filename),FilenameRole);
+ newRow.at(0)->setData(QVariant(v8event->line),LineRole);
+
+ // append
+ m_model->invisibleRootItem()->appendRow(newRow);
+ }
+ }
+}
+
QString QmlProfilerEventsView::QmlProfilerEventsViewPrivate::displayTime(double time) const
{
if (time < 1e6)