]> git.cworth.org Git - apitrace/commitdiff
Save more memory.
authorZack Rusin <zack@kde.org>
Sun, 28 Aug 2011 23:38:00 +0000 (19:38 -0400)
committerZack Rusin <zack@kde.org>
Sun, 28 Aug 2011 23:38:00 +0000 (19:38 -0400)
lookup by id instead of the name. lets us use vector instead of a map
like in the trace_parser.

gui/apitrace.cpp
gui/apitrace.h
gui/apitracecall.cpp

index 2985d9dd44a977eca8053ab03244cc794a967b57..a290006eff5c060d1712a57615b3bb92bf8e9c7d 100644 (file)
@@ -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"
index abcdb014ec200b831c05c9cc1982edd07a657a0b..ba8e11b0243681b3848561cb250ffa4ca73591cc 100644 (file)
@@ -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<ApiTraceCall*> calls() const;
     ApiTraceCall *callAt(int idx) const;
@@ -97,7 +97,7 @@ private:
     bool m_needsSaving;
 
     QSet<ApiTraceCall*> m_errors;
-    QHash<QString, ApiTraceCallSignature*> m_signatures;
+    QVector<ApiTraceCallSignature*> m_signatures;
 };
 
 #endif
index 54e480d3ff980156c7954f4ed4e56b1e35255d74..70794bc0ab9c35958eeac0058d5bf38224eee71d 100644 (file)
@@ -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;