QmlProfiler: Show self time in events view

Someone had already prepared it years ago, but forgot to wire up the
details.

Change-Id: I895bf34694f134eb9526cea98fe08f91b6b9d808
Task-number: QTCREATORBUG-15442
Reviewed-by: Joerg Bornemann <joerg.bornemann@theqtcompany.com>
This commit is contained in:
Ulf Hermann
2015-12-03 12:33:00 +01:00
parent 37c1823974
commit 334e4f32d9
3 changed files with 24 additions and 5 deletions

View File

@@ -211,6 +211,7 @@ void QmlProfilerEventsModelProxy::loadData(qint64 rangeStart, qint64 rangeEnd)
QmlEventStats *stats = &d->data[event->typeIndex()]; QmlEventStats *stats = &d->data[event->typeIndex()];
stats->duration += event->duration(); stats->duration += event->duration();
stats->durationSelf += event->duration();
if (event->duration() < stats->minTime) if (event->duration() < stats->minTime)
stats->minTime = event->duration(); stats->minTime = event->duration();
if (event->duration() > stats->maxTime) if (event->duration() > stats->maxTime)
@@ -226,7 +227,6 @@ void QmlProfilerEventsModelProxy::loadData(qint64 rangeStart, qint64 rangeEnd)
lastEndTime = event->startTime() + event->duration(); lastEndTime = event->startTime() + event->duration();
} }
// //
// binding loop detection // binding loop detection
// //
@@ -245,6 +245,8 @@ void QmlProfilerEventsModelProxy::loadData(qint64 rangeStart, qint64 rangeEnd)
} }
} }
if (callStack.count() > 1)
d->data[callStack.top()->typeIndex()].durationSelf -= event->duration();
callStack.push(event); callStack.push(event);
d->modelManager->modelProxyCountUpdated(d->modelId, i, eventList.count()*2); d->modelManager->modelProxyCountUpdated(d->modelId, i, eventList.count()*2);
@@ -266,6 +268,7 @@ void QmlProfilerEventsModelProxy::loadData(qint64 rangeStart, qint64 rangeEnd)
} }
stats->percentOfTime = stats->duration * 100.0 / qmlTime; stats->percentOfTime = stats->duration * 100.0 / qmlTime;
stats->percentSelf = stats->durationSelf * 100.0 / qmlTime;
d->modelManager->modelProxyCountUpdated(d->modelId, i++, total); d->modelManager->modelProxyCountUpdated(d->modelId, i++, total);
} }
@@ -277,8 +280,10 @@ void QmlProfilerEventsModelProxy::loadData(qint64 rangeStart, qint64 rangeEnd)
QmlEventStats rootEvent; QmlEventStats rootEvent;
rootEvent.duration = rootEvent.minTime = rootEvent.maxTime = rootEvent.timePerCall rootEvent.duration = rootEvent.minTime = rootEvent.maxTime = rootEvent.timePerCall
= rootEvent.medianTime = qmlTime + 1; = rootEvent.medianTime = qmlTime + 1;
rootEvent.durationSelf = 1;
rootEvent.calls = 1; rootEvent.calls = 1;
rootEvent.percentOfTime = 100.0; rootEvent.percentOfTime = 100.0;
rootEvent.percentSelf = 1.0 / rootEvent.duration;
d->data.insert(-1, rootEvent); d->data.insert(-1, rootEvent);

View File

@@ -51,14 +51,17 @@ class QmlProfilerEventsModelProxy : public QObject
Q_OBJECT Q_OBJECT
public: public:
struct QmlEventStats { struct QmlEventStats {
QmlEventStats() : duration(0), calls(0), minTime(std::numeric_limits<qint64>::max()), QmlEventStats() : duration(0), durationSelf(0), calls(0),
maxTime(0), timePerCall(0), percentOfTime(0), medianTime(0), isBindingLoop(false) {} minTime(std::numeric_limits<qint64>::max()), maxTime(0), timePerCall(0),
percentOfTime(0), percentSelf(0), medianTime(0), isBindingLoop(false) {}
qint64 duration; qint64 duration;
qint64 durationSelf;
qint64 calls; qint64 calls;
qint64 minTime; qint64 minTime;
qint64 maxTime; qint64 maxTime;
qint64 timePerCall; qint64 timePerCall;
double percentOfTime; double percentOfTime;
double percentSelf;
qint64 medianTime; qint64 medianTime;
bool isBindingLoop; bool isBindingLoop;

View File

@@ -432,8 +432,8 @@ QmlProfilerEventsMainView::QmlProfilerEventsMainView(QWidget *parent,
setFieldViewable(Type, true); setFieldViewable(Type, true);
setFieldViewable(TimeInPercent, true); setFieldViewable(TimeInPercent, true);
setFieldViewable(TotalTime, true); setFieldViewable(TotalTime, true);
setFieldViewable(SelfTimeInPercent, false); setFieldViewable(SelfTimeInPercent, true);
setFieldViewable(SelfTime, false); setFieldViewable(SelfTime, true);
setFieldViewable(CallCount, true); setFieldViewable(CallCount, true);
setFieldViewable(TimePerCall, true); setFieldViewable(TimePerCall, true);
setFieldViewable(MaxTime, true); setFieldViewable(MaxTime, true);
@@ -663,6 +663,17 @@ void QmlProfilerEventsMainView::parseModelProxy()
newRow.last()->setData(QVariant(stats.duration)); newRow.last()->setData(QVariant(stats.duration));
} }
if (d->m_fieldShown[SelfTimeInPercent]) {
newRow << new EventsViewItem(QString::number(stats.percentSelf, 'f', 2)
+ QLatin1String(" %"));
newRow.last()->setData(QVariant(stats.percentSelf));
}
if (d->m_fieldShown[SelfTime]) {
newRow << new EventsViewItem(QmlProfilerDataModel::formatTime(stats.durationSelf));
newRow.last()->setData(QVariant(stats.durationSelf));
}
if (d->m_fieldShown[CallCount]) { if (d->m_fieldShown[CallCount]) {
newRow << new EventsViewItem(QString::number(stats.calls)); newRow << new EventsViewItem(QString::number(stats.calls));
newRow.last()->setData(QVariant(stats.calls)); newRow.last()->setData(QVariant(stats.calls));