X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=gui%2Ftraceloader.cpp;h=6110c5972d6416752bc82a1c0472812625907549;hb=caa8428eb4c4292d3ea53405d4dc9c3c3f21f10a;hp=6cd8cff744b4aedfd35857059f9b69d388fa3653;hpb=dc9e9c6addb436b7b2d87984d4bd9b0a18d5c5e2;p=apitrace diff --git a/gui/traceloader.cpp b/gui/traceloader.cpp index 6cd8cff..6110c59 100644 --- a/gui/traceloader.cpp +++ b/gui/traceloader.cpp @@ -60,6 +60,7 @@ void TraceLoader::loadTrace(const QString &filename) //Load the entire file into memory parseTrace(); } + emit guessedApi(static_cast(m_parser.api)); emit finishedParsing(); } @@ -409,8 +410,9 @@ TraceLoader::fetchFrameContents(ApiTraceFrame *currentFrame) ApiTraceCall *apiCall = apiCallFromTraceCall(call, m_helpHash, currentFrame, this); - calls[parsedCalls] = apiCall; - Q_ASSERT(calls[parsedCalls]); + Q_ASSERT(apiCall); + Q_ASSERT(parsedCalls < calls.size()); + calls[parsedCalls++] = apiCall; if (apiCall->hasBinaryData()) { QByteArray data = apiCall->arguments()[ @@ -418,8 +420,6 @@ TraceLoader::fetchFrameContents(ApiTraceFrame *currentFrame) binaryDataSize += data.size(); } - ++parsedCalls; - delete call; if (apiCall->flags() & trace::CALL_FLAG_END_FRAME) { @@ -427,11 +427,14 @@ TraceLoader::fetchFrameContents(ApiTraceFrame *currentFrame) } } - assert(parsedCalls == numOfCalls); - Q_ASSERT(parsedCalls == calls.size()); + // There can be fewer parsed calls when call in different + // threads cross the frame boundary + Q_ASSERT(parsedCalls <= numOfCalls); + Q_ASSERT(parsedCalls <= calls.size()); + calls.resize(parsedCalls); calls.squeeze(); - Q_ASSERT(parsedCalls == currentFrame->numChildrenToLoad()); + Q_ASSERT(parsedCalls <= currentFrame->numChildrenToLoad()); emit frameContentsLoaded(currentFrame, calls, binaryDataSize); return calls; @@ -468,8 +471,9 @@ void TraceLoader::findCallIndex(int index) call = *itr; } } - Q_ASSERT(call); - emit foundCallIndex(call); + if (call) { + emit foundCallIndex(call); + } } void TraceLoader::search(const ApiTrace::SearchRequest &request)