X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=gui%2Fapitracecall.cpp;h=59250452e63f00f24417109d529183fc46647d82;hb=3176ebeffe825a5f998b13755c09cfa312b0e8d3;hp=aa60781aa9e9103bcd82ac1a99dad996a66f64f5;hpb=f736a6252b691d8f10403a25a686360868b32e50;p=apitrace diff --git a/gui/apitracecall.cpp b/gui/apitracecall.cpp index aa60781..5925045 100644 --- a/gui/apitracecall.cpp +++ b/gui/apitracecall.cpp @@ -1,6 +1,7 @@ #include "apitracecall.h" #include "apitrace.h" +#include "traceloader.h" #include "trace_model.hpp" #include @@ -175,15 +176,15 @@ void VariantVisitor::visit(Trace::Enum *e) { ApiTraceEnumSignature *sig = 0; - if (m_trace) { - sig = m_trace->enumSignature(e->sig->id); + if (m_loader) { + sig = m_loader->enumSignature(e->sig->id); } if (!sig) { sig = new ApiTraceEnumSignature( QString::fromStdString(e->sig->name), QVariant(e->sig->value)); - if (m_trace) { - m_trace->addEnumSignature(e->sig->id, sig); + if (m_loader) { + m_loader->addEnumSignature(e->sig->id, sig); } } @@ -215,6 +216,7 @@ void VariantVisitor::visit(Trace::Blob *blob) // Blob's will start deleting the data we will need to // start deep copying it or switch to using something like // Boost's shared_ptr or Qt's QSharedPointer to handle it + blob->toPointer(true); QByteArray barray = QByteArray::fromRawData(blob->buf, blob->size); m_variant = QVariant(barray); } @@ -388,12 +390,12 @@ ApiArray::ApiArray(const Trace::Array *arr) init(arr); } -ApiArray::ApiArray(const QList &vals) +ApiArray::ApiArray(const QVector &vals) : m_array(vals) { } -QList ApiArray::values() const +QVector ApiArray::values() const { return m_array; } @@ -425,6 +427,7 @@ void ApiArray::init(const Trace::Array *arr) m_array.append(vis.variant()); } + m_array.squeeze(); } ApiTraceState::ApiTraceState() @@ -598,17 +601,15 @@ void ApiTraceEvent::setState(ApiTraceState *state) m_state = state; } -ApiTraceCall::ApiTraceCall(ApiTraceFrame *parentFrame, const Trace::Call *call) +ApiTraceCall::ApiTraceCall(ApiTraceFrame *parentFrame, + TraceLoader *loader, + const Trace::Call *call) : ApiTraceEvent(ApiTraceEvent::Call), m_parentFrame(parentFrame) { - ApiTrace *trace = parentTrace(); - - Q_ASSERT(trace); - m_index = call->no; - m_signature = trace->signature(call->sig->id); + m_signature = loader->signature(call->sig->id); if (!m_signature) { QString name = QString::fromStdString(call->sig->name); @@ -618,16 +619,16 @@ ApiTraceCall::ApiTraceCall(ApiTraceFrame *parentFrame, const Trace::Call *call) argNames += QString::fromStdString(call->sig->arg_names[i]); } m_signature = new ApiTraceCallSignature(name, argNames); - trace->addSignature(call->sig->id, m_signature); + loader->addSignature(call->sig->id, m_signature); } if (call->ret) { - VariantVisitor retVisitor(trace); + VariantVisitor retVisitor(loader); call->ret->visit(retVisitor); m_returnValue = retVisitor.variant(); } m_argValues.reserve(call->args.size()); for (int i = 0; i < call->args.size(); ++i) { - VariantVisitor argVisitor(trace); + VariantVisitor argVisitor(loader); call->args[i]->visit(argVisitor); m_argValues.append(argVisitor.variant()); if (m_argValues[i].type() == QVariant::ByteArray) { @@ -921,7 +922,9 @@ int ApiTraceCall::numChildren() const ApiTraceFrame::ApiTraceFrame(ApiTrace *parentTrace) : ApiTraceEvent(ApiTraceEvent::Frame), m_parentTrace(parentTrace), - m_binaryDataSize(0) + m_binaryDataSize(0), + m_loaded(false), + m_callsToLoad(0) { } @@ -997,7 +1000,11 @@ int ApiTraceFrame::callIndex(ApiTraceCall *call) const bool ApiTraceFrame::isEmpty() const { - return m_calls.isEmpty(); + if (m_loaded) { + return m_calls.isEmpty(); + } else { + return m_callsToLoad == 0; + } } int ApiTraceFrame::binaryDataSize() const @@ -1010,4 +1017,30 @@ void ApiTraceFrame::setCalls(const QVector &calls, { m_calls = calls; m_binaryDataSize = binaryDataSize; + m_loaded = true; +} + +bool ApiTraceFrame::loaded() const +{ + return m_loaded; +} + +void ApiTraceFrame::setLoaded(bool l) +{ + m_loaded = l; +} + +void ApiTraceFrame::setNumChildren(int num) +{ + m_callsToLoad = num; +} + +void ApiTraceFrame::setParentTrace(ApiTrace *parent) +{ + m_parentTrace = parent; +} + +int ApiTraceFrame::numChildrenToLoad() const +{ + return m_callsToLoad; }