forked from qt-creator/qt-creator
QmlProfiler: Add some sanity checks to the various models
If we pop an event from the stack, then it should be the same type we pushed earlier. Change-Id: If4389cb57fa8996b3772fefca92d27c33dc35c65 Task-number: QTCREATORBUG-17885 Reviewed-by: hjk <hjk@qt.io>
This commit is contained in:
@@ -106,6 +106,7 @@ void FlameGraphModel::loadEvent(const QmlEvent &event, const QmlEventType &type)
|
|||||||
const bool isCompiling = (type.rangeType() == Compiling);
|
const bool isCompiling = (type.rangeType() == Compiling);
|
||||||
QStack<QmlEvent> &stack = isCompiling ? m_compileStack : m_callStack;
|
QStack<QmlEvent> &stack = isCompiling ? m_compileStack : m_callStack;
|
||||||
FlameGraphData *&stackTop = isCompiling ? m_compileStackTop : m_callStackTop;
|
FlameGraphData *&stackTop = isCompiling ? m_compileStackTop : m_callStackTop;
|
||||||
|
QTC_ASSERT(stackTop, return);
|
||||||
|
|
||||||
if (type.message() == MemoryAllocation) {
|
if (type.message() == MemoryAllocation) {
|
||||||
if (type.detailType() == HeapPage)
|
if (type.detailType() == HeapPage)
|
||||||
@@ -121,6 +122,8 @@ void FlameGraphModel::loadEvent(const QmlEvent &event, const QmlEventType &type)
|
|||||||
}
|
}
|
||||||
|
|
||||||
} else if (event.rangeStage() == RangeEnd) {
|
} else if (event.rangeStage() == RangeEnd) {
|
||||||
|
QTC_ASSERT(stackTop != &m_stackBottom, return);
|
||||||
|
QTC_ASSERT(stackTop->typeIndex == event.typeIndex(), return);
|
||||||
stackTop->duration += event.timestamp() - stack.top().timestamp();
|
stackTop->duration += event.timestamp() - stack.top().timestamp();
|
||||||
stack.pop();
|
stack.pop();
|
||||||
stackTop = stackTop->parent;
|
stackTop = stackTop->parent;
|
||||||
@@ -129,6 +132,7 @@ void FlameGraphModel::loadEvent(const QmlEvent &event, const QmlEventType &type)
|
|||||||
stack.push(event);
|
stack.push(event);
|
||||||
stackTop = pushChild(stackTop, event);
|
stackTop = pushChild(stackTop, event);
|
||||||
}
|
}
|
||||||
|
QTC_CHECK(stackTop);
|
||||||
}
|
}
|
||||||
|
|
||||||
void FlameGraphModel::finalize()
|
void FlameGraphModel::finalize()
|
||||||
|
|||||||
@@ -135,12 +135,14 @@ void MemoryUsageModel::loadEvent(const QmlEvent &event, const QmlEventType &type
|
|||||||
{
|
{
|
||||||
if (type.message() != MemoryAllocation) {
|
if (type.message() != MemoryAllocation) {
|
||||||
if (type.rangeType() != MaximumRangeType) {
|
if (type.rangeType() != MaximumRangeType) {
|
||||||
|
m_continuation = ContinueNothing;
|
||||||
if (event.rangeStage() == RangeStart)
|
if (event.rangeStage() == RangeStart)
|
||||||
m_rangeStack.push(RangeStackFrame(event.typeIndex(), event.timestamp()));
|
m_rangeStack.push(RangeStackFrame(event.typeIndex(), event.timestamp()));
|
||||||
else if (event.rangeStage() == RangeEnd)
|
else if (event.rangeStage() == RangeEnd) {
|
||||||
|
QTC_ASSERT(!m_rangeStack.isEmpty(), return);
|
||||||
|
QTC_ASSERT(m_rangeStack.top().originTypeIndex == event.typeIndex(), return);
|
||||||
m_rangeStack.pop();
|
m_rangeStack.pop();
|
||||||
|
}
|
||||||
m_continuation = ContinueNothing;
|
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -225,7 +225,8 @@ void QmlProfilerStatisticsModel::loadEvent(const QmlEvent &event, const QmlEvent
|
|||||||
break;
|
break;
|
||||||
case RangeEnd: {
|
case RangeEnd: {
|
||||||
// update stats
|
// update stats
|
||||||
|
QTC_ASSERT(!stack.isEmpty(), return);
|
||||||
|
QTC_ASSERT(stack.top().typeIndex() == event.typeIndex(), return);
|
||||||
QmlEventStats *stats = &d->data[event.typeIndex()];
|
QmlEventStats *stats = &d->data[event.typeIndex()];
|
||||||
qint64 duration = event.timestamp() - stack.top().timestamp();
|
qint64 duration = event.timestamp() - stack.top().timestamp();
|
||||||
stats->duration += duration;
|
stats->duration += duration;
|
||||||
|
|||||||
Reference in New Issue
Block a user