X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=gui%2Fapitrace.cpp;h=8b2eeecaa4b8115f51d6578b5041ca0a86759d57;hb=034ca3f55a9c40e7011c86af6e68642a371d1093;hp=012ce6ce573f492f763503c93014cc7a0092a5dc;hpb=cc0b4911a0ccc002c1eed54637f67f21c56b40fc;p=apitrace diff --git a/gui/apitrace.cpp b/gui/apitrace.cpp index 012ce6c..8b2eeec 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); @@ -141,19 +146,25 @@ void ApiTrace::setFrameMarker(FrameMarker marker) void ApiTrace::addFrames(const QList &frames) { + QList calls; 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; + Q_ASSERT(this == frame->parentTrace()); + numNewCalls += frame->numChildren(); + calls += frame->calls(); } + m_calls.reserve(m_calls.count() + calls.count()); + m_calls += calls; - emit framesAdded(currentFrames, numNewFrames); + emit endAddingFrames(); emit callsAdded(currentCalls, numNewCalls); } @@ -162,15 +173,16 @@ void ApiTrace::detectFrames() if (m_calls.isEmpty()) return; + emit beginAddingFrames(0, m_frames.count()); + ApiTraceFrame *currentFrame = 0; foreach(ApiTraceCall *apiCall, m_calls) { if (!currentFrame) { - currentFrame = new ApiTraceFrame(); - currentFrame->setParentTrace(this); + currentFrame = new ApiTraceFrame(this); 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 +196,7 @@ void ApiTrace::detectFrames() m_frames.append(currentFrame); currentFrame = 0; } - emit framesAdded(0, m_frames.count()); + emit endAddingFrames(); } ApiTraceCall * ApiTrace::callWithIndex(int idx) const @@ -200,10 +212,10 @@ ApiTraceCall * ApiTrace::callWithIndex(int idx) const ApiTraceState ApiTrace::defaultState() const { ApiTraceFrame *frame = frameAt(0); - if (!frame) + if (!frame || !frame->hasState()) return ApiTraceState(); - return frame->state(); + return *frame->state(); } void ApiTrace::callEdited(ApiTraceCall *call) @@ -277,4 +289,34 @@ bool ApiTrace::hasErrors() const return !m_errors.isEmpty(); } +ApiTraceCallSignature * ApiTrace::signature(unsigned id) +{ + if (id >= m_signatures.count()) { + m_signatures.resize(id + 1); + return NULL; + } else { + return m_signatures[id]; + } +} + +void ApiTrace::addSignature(unsigned id, ApiTraceCallSignature *signature) +{ + m_signatures[id] = signature; +} + +ApiTraceEnumSignature * ApiTrace::enumSignature(unsigned id) +{ + if (id >= m_enumSignatures.count()) { + m_enumSignatures.resize(id + 1); + return NULL; + } else { + return m_enumSignatures[id]; + } +} + +void ApiTrace::addEnumSignature(unsigned id, ApiTraceEnumSignature *signature) +{ + m_enumSignatures[id] = signature; +} + #include "apitrace.moc"