From: Zack Rusin Date: Sun, 28 Aug 2011 23:38:00 +0000 (-0400) Subject: Save more memory. X-Git-Url: https://git.cworth.org/git?a=commitdiff_plain;h=b31e21488bf972b14d4d698cffe0afe03b5f02e5;p=apitrace Save more memory. lookup by id instead of the name. lets us use vector instead of a map like in the trace_parser. --- diff --git a/gui/apitrace.cpp b/gui/apitrace.cpp index 2985d9d..a290006 100644 --- a/gui/apitrace.cpp +++ b/gui/apitrace.cpp @@ -289,14 +289,19 @@ 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(ApiTraceCallSignature *signature) +void ApiTrace::addSignature(unsigned id, ApiTraceCallSignature *signature) { - m_signatures.insert(signature->name(), signature); + m_signatures[id] = signature; } #include "apitrace.moc" diff --git a/gui/apitrace.h b/gui/apitrace.h index abcdb01..ba8e11b 100644 --- a/gui/apitrace.h +++ b/gui/apitrace.h @@ -33,8 +33,8 @@ public: ApiTraceState defaultState() const; - ApiTraceCallSignature *signature(const QString &callName); - void addSignature(ApiTraceCallSignature *signature); + ApiTraceCallSignature *signature(unsigned id); + void addSignature(unsigned id, ApiTraceCallSignature *signature); QList calls() const; ApiTraceCall *callAt(int idx) const; @@ -97,7 +97,7 @@ private: bool m_needsSaving; QSet m_errors; - QHash m_signatures; + QVector m_signatures; }; #endif diff --git a/gui/apitracecall.cpp b/gui/apitracecall.cpp index 54e480d..70794bc 100644 --- a/gui/apitracecall.cpp +++ b/gui/apitracecall.cpp @@ -586,17 +586,17 @@ ApiTraceCall::ApiTraceCall(ApiTraceFrame *parentFrame, const Trace::Call *call) m_index = call->no; - QString name = QString::fromStdString(call->sig->name); - m_signature = trace->signature(name); + m_signature = trace->signature(call->sig->id); if (!m_signature) { + QString name = QString::fromStdString(call->sig->name); QStringList argNames; argNames.reserve(call->sig->num_args); for (int i = 0; i < call->sig->num_args; ++i) { argNames += QString::fromStdString(call->sig->arg_names[i]); } m_signature = new ApiTraceCallSignature(name, argNames); - trace->addSignature(m_signature); + trace->addSignature(call->sig->id, m_signature); } if (call->ret) { VariantVisitor retVisitor;