X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=gui%2Fapitrace.cpp;h=c94688eaa09327bb98684515dc9fc462f8473aac;hb=18d094ea673e246a01dc318fd4d2dfd50ca2d630;hp=023a094a93f2e2867117d3861153e1f4735b90c0;hpb=872d19acf33c19c3c6ca42255f5e86cc2c120bff;p=apitrace diff --git a/gui/apitrace.cpp b/gui/apitrace.cpp index 023a094..c94688e 100644 --- a/gui/apitrace.cpp +++ b/gui/apitrace.cpp @@ -264,8 +264,11 @@ bool ApiTrace::hasErrors() const void ApiTrace::loadFrame(ApiTraceFrame *frame) { - Q_ASSERT(!frame->isLoaded()); - emit requestFrame(frame); + if (!isFrameLoading(frame)) { + Q_ASSERT(!frame->isLoaded()); + m_loadingFrames.insert(frame); + emit requestFrame(frame); + } } void ApiTrace::finishedParsing() @@ -281,9 +284,13 @@ void ApiTrace::loaderFrameLoaded(ApiTraceFrame *frame, quint64 binaryDataSize) { Q_ASSERT(frame->numChildrenToLoad() == calls.size()); - emit beginLoadingFrame(frame, calls.size()); - frame->setCalls(calls, binaryDataSize); - emit endLoadingFrame(frame); + + if (!frame->isLoaded()) { + emit beginLoadingFrame(frame, calls.size()); + frame->setCalls(calls, binaryDataSize); + emit endLoadingFrame(frame); + m_loadingFrames.remove(frame); + } if (!m_queuedErrors.isEmpty()) { QList< QPair >::iterator itr; @@ -481,9 +488,14 @@ void ApiTrace::setCallError(const ApiTraceError &error) } emit changed(call); } else { - emit requestFrame(frame); + loadFrame(frame); m_queuedErrors.append(qMakePair(frame, error)); } } +bool ApiTrace::isFrameLoading(ApiTraceFrame *frame) const +{ + return m_loadingFrames.contains(frame); +} + #include "apitrace.moc"