QmlProfiler: show median time in summary

Task-number: QTCREATORBUG-5032
Change-Id: I53e95de12041fe1ee416b724dbd1076d330ee7db
Reviewed-on: http://codereview.qt.nokia.com/3516
Reviewed-by: Kai Koehne <kai.koehne@nokia.com>
This commit is contained in:
Christiaan Janssen
2011-08-24 16:30:31 +02:00
parent e3257369a8
commit e3c1b4c94f
4 changed files with 30 additions and 1 deletions

View File

@@ -228,6 +228,7 @@ void QmlProfilerEventList::compileStatistics()
// maximum possible value // maximum possible value
eventDescription->minTime = d->m_endTimeSortedList.last().endTime; eventDescription->minTime = d->m_endTimeSortedList.last().endTime;
eventDescription->maxTime = 0; eventDescription->maxTime = 0;
eventDescription->medianTime = 0;
eventDescription->cumulatedDuration = 0; eventDescription->cumulatedDuration = 0;
eventDescription->parentList.clear(); eventDescription->parentList.clear();
eventDescription->childrenList.clear(); eventDescription->childrenList.clear();
@@ -273,6 +274,20 @@ void QmlProfilerEventList::compileStatistics()
binding->timePerCall = binding->calls > 0 ? double(binding->cumulatedDuration) / binding->calls : 0; binding->timePerCall = binding->calls > 0 ? double(binding->cumulatedDuration) / binding->calls : 0;
} }
// compute median time
QHash < QmlEventData* , QList<qint64> > durationLists;
foreach (const QmlEventStartTimeData &startData, d->m_startTimeSortedList) {
durationLists[startData.description].append(startData.length);
}
QMutableHashIterator < QmlEventData* , QList<qint64> > iter(durationLists);
while (iter.hasNext()) {
iter.next();
if (!iter.value().isEmpty()) {
qSort(iter.value());
iter.key()->medianTime = iter.value().at(iter.value().count()/2);
}
}
// continue postprocess // continue postprocess
postProcess(); postProcess();
} }

View File

@@ -57,6 +57,7 @@ struct QMLJSDEBUGCLIENT_EXPORT QmlEventData
qint64 maxTime; qint64 maxTime;
double timePerCall; double timePerCall;
double percentOfTime; double percentOfTime;
qint64 medianTime;
}; };
typedef QHash<QString, QmlEventData *> QmlEventHash; typedef QHash<QString, QmlEventData *> QmlEventHash;

View File

@@ -165,6 +165,7 @@ void QmlProfilerEventsView::setViewType(ViewTypes type)
setFieldViewable(TimePerCall, true); setFieldViewable(TimePerCall, true);
setFieldViewable(MaxTime, true); setFieldViewable(MaxTime, true);
setFieldViewable(MinTime, true); setFieldViewable(MinTime, true);
setFieldViewable(MedianTime, true);
setFieldViewable(Details, false); setFieldViewable(Details, false);
setFieldViewable(Parents, false); setFieldViewable(Parents, false);
setFieldViewable(Children, false); setFieldViewable(Children, false);
@@ -181,6 +182,7 @@ void QmlProfilerEventsView::setViewType(ViewTypes type)
setFieldViewable(TimePerCall, false); setFieldViewable(TimePerCall, false);
setFieldViewable(MaxTime, false); setFieldViewable(MaxTime, false);
setFieldViewable(MinTime, false); setFieldViewable(MinTime, false);
setFieldViewable(MedianTime, false);
setFieldViewable(Details, true); setFieldViewable(Details, true);
setFieldViewable(Parents, true); setFieldViewable(Parents, true);
setFieldViewable(Children, false); setFieldViewable(Children, false);
@@ -197,6 +199,7 @@ void QmlProfilerEventsView::setViewType(ViewTypes type)
setFieldViewable(TimePerCall, false); setFieldViewable(TimePerCall, false);
setFieldViewable(MaxTime, false); setFieldViewable(MaxTime, false);
setFieldViewable(MinTime, false); setFieldViewable(MinTime, false);
setFieldViewable(MedianTime, false);
setFieldViewable(Details, true); setFieldViewable(Details, true);
setFieldViewable(Parents, false); setFieldViewable(Parents, false);
setFieldViewable(Children, true); setFieldViewable(Children, true);
@@ -234,7 +237,9 @@ void QmlProfilerEventsView::setHeaderLabels()
if (d->m_fieldShown[CallCount]) if (d->m_fieldShown[CallCount])
d->m_model->setHeaderData(fieldIndex++, Qt::Horizontal, QVariant(tr("Calls"))); d->m_model->setHeaderData(fieldIndex++, Qt::Horizontal, QVariant(tr("Calls")));
if (d->m_fieldShown[TimePerCall]) if (d->m_fieldShown[TimePerCall])
d->m_model->setHeaderData(fieldIndex++, Qt::Horizontal, QVariant(tr("Time per Call"))); d->m_model->setHeaderData(fieldIndex++, Qt::Horizontal, QVariant(tr("Mean Time")));
if (d->m_fieldShown[MedianTime])
d->m_model->setHeaderData(fieldIndex++, Qt::Horizontal, QVariant(tr("Median Time")));
if (d->m_fieldShown[MaxTime]) if (d->m_fieldShown[MaxTime])
d->m_model->setHeaderData(fieldIndex++, Qt::Horizontal, QVariant(tr("Longest Time"))); d->m_model->setHeaderData(fieldIndex++, Qt::Horizontal, QVariant(tr("Longest Time")));
if (d->m_fieldShown[MinTime]) if (d->m_fieldShown[MinTime])
@@ -324,6 +329,11 @@ void QmlProfilerEventsView::QmlProfilerEventsViewPrivate::buildModelFromList( co
newRow.last()->setData(QVariant(binding->timePerCall)); newRow.last()->setData(QVariant(binding->timePerCall));
} }
if (m_fieldShown[MedianTime]) {
newRow << new EventsViewItem(displayTime(binding->medianTime));
newRow.last()->setData(QVariant(binding->medianTime));
}
if (m_fieldShown[MaxTime]) { if (m_fieldShown[MaxTime]) {
newRow << new EventsViewItem(displayTime(binding->maxTime)); newRow << new EventsViewItem(displayTime(binding->maxTime));
newRow.last()->setData(QVariant(binding->maxTime)); newRow.last()->setData(QVariant(binding->maxTime));
@@ -339,6 +349,8 @@ void QmlProfilerEventsView::QmlProfilerEventsViewPrivate::buildModelFromList( co
newRow.last()->setData(QVariant(binding->details)); newRow.last()->setData(QVariant(binding->details));
} }
if (!newRow.isEmpty()) { if (!newRow.isEmpty()) {
// no edit // no edit
foreach (QStandardItem *item, newRow) foreach (QStandardItem *item, newRow)

View File

@@ -62,6 +62,7 @@ public:
TimePerCall, TimePerCall,
MaxTime, MaxTime,
MinTime, MinTime,
MedianTime,
Details, Details,
Parents, Parents,
Children, Children,