X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=gui%2Fapitrace.cpp;h=8b2eeecaa4b8115f51d6578b5041ca0a86759d57;hb=034ca3f55a9c40e7011c86af6e68642a371d1093;hp=9c99cfabf624b0adcbacb72a8ace9327f9567781;hpb=ac4dd9a23fe0e08496368a0e013ad538675106f3;p=apitrace diff --git a/gui/apitrace.cpp b/gui/apitrace.cpp index 9c99cfa..8b2eeec 100644 --- a/gui/apitrace.cpp +++ b/gui/apitrace.cpp @@ -146,6 +146,7 @@ void ApiTrace::setFrameMarker(FrameMarker marker) void ApiTrace::addFrames(const QList &frames) { + QList calls; int currentFrames = m_frames.count(); int numNewFrames = frames.count(); @@ -158,8 +159,10 @@ void ApiTrace::addFrames(const QList &frames) foreach(ApiTraceFrame *frame, frames) { Q_ASSERT(this == frame->parentTrace()); numNewCalls += frame->numChildren(); - m_calls += frame->calls(); + calls += frame->calls(); } + m_calls.reserve(m_calls.count() + calls.count()); + m_calls += calls; emit endAddingFrames(); emit callsAdded(currentCalls, numNewCalls); @@ -209,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) @@ -286,14 +289,34 @@ bool ApiTrace::hasErrors() const return !m_errors.isEmpty(); } -ApiTraceCallSignature * ApiTrace::signature(const QString &callName) +ApiTraceCallSignature * ApiTrace::signature(unsigned id) { - return m_signatures[callName]; + 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::addSignature(ApiTraceCallSignature *signature) +void ApiTrace::addEnumSignature(unsigned id, ApiTraceEnumSignature *signature) { - m_signatures.insert(signature->name(), signature); + m_enumSignatures[id] = signature; } #include "apitrace.moc"