X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=gui%2Fapitrace.cpp;h=5758b0750a3acb0ca743af3908bafe6a21d59796;hb=a5b476eb4eed9b06e22f4a80b16251aea243207d;hp=023a094a93f2e2867117d3861153e1f4735b90c0;hpb=ad513b3f5f6e3b1e460d9cf77479715cc05319b4;p=apitrace diff --git a/gui/apitrace.cpp b/gui/apitrace.cpp index 023a094..5758b07 100644 --- a/gui/apitrace.cpp +++ b/gui/apitrace.cpp @@ -82,9 +82,7 @@ bool ApiTrace::isCallAFrameMarker(const ApiTraceCall *call, switch (marker) { case FrameMarker_SwapBuffers: - return call->name().contains(QLatin1String("SwapBuffers")) || - call->name() == QLatin1String("CGLFlushDrawable") || - call->name() == QLatin1String("glFrameTerminatorGREMEDY"); + return call->flags() & trace::CALL_FLAG_END_FRAME; case FrameMarker_Flush: return call->name() == QLatin1String("glFlush"); case FrameMarker_Finish: @@ -264,8 +262,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 +282,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 +486,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"