forked from qt-creator/qt-creator
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:
@@ -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);
|
||||||
|
|
||||||
|
@@ -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;
|
||||||
|
@@ -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));
|
||||||
|
Reference in New Issue
Block a user