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
|
// 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();
|
||||||
}
|
}
|
||||||
|
@@ -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;
|
||||||
|
@@ -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)
|
||||||
|
@@ -62,6 +62,7 @@ public:
|
|||||||
TimePerCall,
|
TimePerCall,
|
||||||
MaxTime,
|
MaxTime,
|
||||||
MinTime,
|
MinTime,
|
||||||
|
MedianTime,
|
||||||
Details,
|
Details,
|
||||||
Parents,
|
Parents,
|
||||||
Children,
|
Children,
|
||||||
|
Reference in New Issue
Block a user