X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=gui%2Fapitrace.cpp;h=d9a248dbaddc180b121d146a50777aaf55486953;hb=03718f44e002669e8b94561d95ad00bd1a51a1ef;hp=6fa994a5d43d1ff3fdda929368bada341e43bdf2;hpb=b53b161dfae79f1bbb1dd2c8dff087b5e2365a26;p=apitrace diff --git a/gui/apitrace.cpp b/gui/apitrace.cpp index 6fa994a..d9a248d 100644 --- a/gui/apitrace.cpp +++ b/gui/apitrace.cpp @@ -40,7 +40,9 @@ bool ApiTrace::isCallAFrameMarker(const ApiTraceCall *call, switch (marker) { case FrameMarker_SwapBuffers: - return call->name().contains(QLatin1String("SwapBuffers")); + return call->name().contains(QLatin1String("SwapBuffers")) || + call->name() == QLatin1String("CGLFlushDrawable") || + call->name() == QLatin1String("glFrameTerminatorGREMEDY"); case FrameMarker_Flush: return call->name() == QLatin1String("glFlush"); case FrameMarker_Finish: @@ -106,7 +108,7 @@ int ApiTrace::numCallsInFrame(int idx) const { const ApiTraceFrame *frame = frameAt(idx); if (frame) - return frame->calls.count(); + return frame->numChildren(); else return 0; } @@ -122,6 +124,9 @@ void ApiTrace::setFileName(const QString &name) } m_frames.clear(); m_calls.clear(); + m_errors.clear(); + m_editedCalls.clear(); + m_needsSaving = false; emit invalidated(); m_loader->loadFile(m_fileName); @@ -143,17 +148,20 @@ void ApiTrace::addFrames(const QList &frames) { int currentFrames = m_frames.count(); int numNewFrames = frames.count(); + + emit beginAddingFrames(currentFrames, numNewFrames); + m_frames += frames; int currentCalls = m_calls.count(); int numNewCalls = 0; foreach(ApiTraceFrame *frame, frames) { frame->setParentTrace(this); - numNewCalls += frame->calls.count(); - m_calls += frame->calls; + numNewCalls += frame->numChildren(); + m_calls += frame->calls(); } - emit framesAdded(currentFrames, numNewFrames); + emit endAddingFrames(); emit callsAdded(currentCalls, numNewCalls); } @@ -162,6 +170,8 @@ void ApiTrace::detectFrames() if (m_calls.isEmpty()) return; + emit beginAddingFrames(0, m_frames.count()); + ApiTraceFrame *currentFrame = 0; foreach(ApiTraceCall *apiCall, m_calls) { if (!currentFrame) { @@ -170,7 +180,7 @@ void ApiTrace::detectFrames() currentFrame->number = m_frames.count(); } apiCall->setParentFrame(currentFrame); - currentFrame->calls.append(apiCall); + currentFrame->addCall(apiCall); if (ApiTrace::isCallAFrameMarker(apiCall, m_frameMarker)) { m_frames.append(currentFrame); @@ -184,7 +194,7 @@ void ApiTrace::detectFrames() m_frames.append(currentFrame); currentFrame = 0; } - emit framesAdded(0, m_frames.count()); + emit endAddingFrames(); } ApiTraceCall * ApiTrace::callWithIndex(int idx) const @@ -262,7 +272,19 @@ bool ApiTrace::isSaving() const void ApiTrace::callError(ApiTraceCall *call) { + Q_ASSERT(call); + + if (call->hasError()) + m_errors.insert(call); + else + m_errors.remove(call); + emit changed(call); } +bool ApiTrace::hasErrors() const +{ + return !m_errors.isEmpty(); +} + #include "apitrace.moc"