forked from qt-creator/qt-creator
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:
@@ -228,6 +228,7 @@ void QmlProfilerEventList::compileStatistics()
|
||||
// maximum possible value
|
||||
eventDescription->minTime = d->m_endTimeSortedList.last().endTime;
|
||||
eventDescription->maxTime = 0;
|
||||
eventDescription->medianTime = 0;
|
||||
eventDescription->cumulatedDuration = 0;
|
||||
eventDescription->parentList.clear();
|
||||
eventDescription->childrenList.clear();
|
||||
@@ -273,6 +274,20 @@ void QmlProfilerEventList::compileStatistics()
|
||||
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
|
||||
postProcess();
|
||||
}
|
||||
|
@@ -57,6 +57,7 @@ struct QMLJSDEBUGCLIENT_EXPORT QmlEventData
|
||||
qint64 maxTime;
|
||||
double timePerCall;
|
||||
double percentOfTime;
|
||||
qint64 medianTime;
|
||||
};
|
||||
|
||||
typedef QHash<QString, QmlEventData *> QmlEventHash;
|
||||
|
@@ -165,6 +165,7 @@ void QmlProfilerEventsView::setViewType(ViewTypes type)
|
||||
setFieldViewable(TimePerCall, true);
|
||||
setFieldViewable(MaxTime, true);
|
||||
setFieldViewable(MinTime, true);
|
||||
setFieldViewable(MedianTime, true);
|
||||
setFieldViewable(Details, false);
|
||||
setFieldViewable(Parents, false);
|
||||
setFieldViewable(Children, false);
|
||||
@@ -181,6 +182,7 @@ void QmlProfilerEventsView::setViewType(ViewTypes type)
|
||||
setFieldViewable(TimePerCall, false);
|
||||
setFieldViewable(MaxTime, false);
|
||||
setFieldViewable(MinTime, false);
|
||||
setFieldViewable(MedianTime, false);
|
||||
setFieldViewable(Details, true);
|
||||
setFieldViewable(Parents, true);
|
||||
setFieldViewable(Children, false);
|
||||
@@ -197,6 +199,7 @@ void QmlProfilerEventsView::setViewType(ViewTypes type)
|
||||
setFieldViewable(TimePerCall, false);
|
||||
setFieldViewable(MaxTime, false);
|
||||
setFieldViewable(MinTime, false);
|
||||
setFieldViewable(MedianTime, false);
|
||||
setFieldViewable(Details, true);
|
||||
setFieldViewable(Parents, false);
|
||||
setFieldViewable(Children, true);
|
||||
@@ -234,7 +237,9 @@ void QmlProfilerEventsView::setHeaderLabels()
|
||||
if (d->m_fieldShown[CallCount])
|
||||
d->m_model->setHeaderData(fieldIndex++, Qt::Horizontal, QVariant(tr("Calls")));
|
||||
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])
|
||||
d->m_model->setHeaderData(fieldIndex++, Qt::Horizontal, QVariant(tr("Longest Time")));
|
||||
if (d->m_fieldShown[MinTime])
|
||||
@@ -324,6 +329,11 @@ void QmlProfilerEventsView::QmlProfilerEventsViewPrivate::buildModelFromList( co
|
||||
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]) {
|
||||
newRow << new EventsViewItem(displayTime(binding->maxTime));
|
||||
newRow.last()->setData(QVariant(binding->maxTime));
|
||||
@@ -339,6 +349,8 @@ void QmlProfilerEventsView::QmlProfilerEventsViewPrivate::buildModelFromList( co
|
||||
newRow.last()->setData(QVariant(binding->details));
|
||||
}
|
||||
|
||||
|
||||
|
||||
if (!newRow.isEmpty()) {
|
||||
// no edit
|
||||
foreach (QStandardItem *item, newRow)
|
||||
|
@@ -62,6 +62,7 @@ public:
|
||||
TimePerCall,
|
||||
MaxTime,
|
||||
MinTime,
|
||||
MedianTime,
|
||||
Details,
|
||||
Parents,
|
||||
Children,
|
||||
|
Reference in New Issue
Block a user