connect(m_loader, SIGNAL(framesLoaded(const QList<ApiTraceFrame*>)),
this, SLOT(addFrames(const QList<ApiTraceFrame*>)));
connect(m_loader,
- SIGNAL(frameContentsLoaded(ApiTraceFrame*,QVector<ApiTraceCall*>,quint64)),
+ SIGNAL(frameContentsLoaded(ApiTraceFrame*,QVector<ApiTraceCall*>, QVector<ApiTraceCall*>,quint64)),
this,
- SLOT(loaderFrameLoaded(ApiTraceFrame*,QVector<ApiTraceCall*>,quint64)));
+ SLOT(loaderFrameLoaded(ApiTraceFrame*,QVector<ApiTraceCall*>,QVector<ApiTraceCall*>,quint64)));
connect(m_loader, SIGNAL(guessedApi(int)),
this, SLOT(guessedApi(int)));
connect(m_loader, SIGNAL(finishedParsing()),
{
const ApiTraceFrame *frame = frameAt(idx);
if (frame) {
- return frame->numChildren();
+ return frame->numTotalCalls();
} else {
return 0;
}
}
void ApiTrace::loaderFrameLoaded(ApiTraceFrame *frame,
+ const QVector<ApiTraceCall*> &topLevelItems,
const QVector<ApiTraceCall*> &calls,
quint64 binaryDataSize)
{
- Q_ASSERT(frame->numChildrenToLoad() == calls.size());
+ Q_ASSERT(frame->numChildrenToLoad() >= calls.size());
if (!frame->isLoaded()) {
emit beginLoadingFrame(frame, calls.size());
- frame->setCalls(calls, binaryDataSize);
+ frame->setCalls(topLevelItems, calls, binaryDataSize);
emit endLoadingFrame(frame);
m_loadingFrames.remove(frame);
}
void ApiTrace::findFrameStart(ApiTraceFrame *frame)
{
+ if (!frame)
+ return;
+
if (frame->isLoaded()) {
emit foundFrameStart(frame);
} else {
void ApiTrace::findFrameEnd(ApiTraceFrame *frame)
{
+ if (!frame)
+ return;
+
if (frame->isLoaded()) {
emit foundFrameEnd(frame);
} else {
for (int frameIdx = 0; frameIdx < m_frames.size(); ++frameIdx) {
const ApiTraceFrame *frame = m_frames[frameIdx];
unsigned numCallsInFrame = frame->isLoaded()
- ? frame->numChildren()
+ ? frame->numTotalCalls()
: frame->numChildrenToLoad();
unsigned firstCall = numCalls;
unsigned endCall = numCalls + numCallsInFrame;