]> git.cworth.org Git - apitrace/commitdiff
Do some initial saving.
authorZack Rusin <zack@kde.org>
Mon, 18 Apr 2011 03:30:58 +0000 (23:30 -0400)
committerZack Rusin <zack@kde.org>
Mon, 18 Apr 2011 03:30:58 +0000 (23:30 -0400)
gui/apitrace.cpp
gui/apitrace.h
gui/apitracemodel.cpp
gui/saverthread.cpp

index 7d02b5dcdd97813af5e29179bcde4fd46bbf8aaf..e98eeff04f278118c73af45ee88c5273edda2e78 100644 (file)
@@ -1,6 +1,7 @@
 #include "apitrace.h"
 
 #include "loaderthread.h"
+#include "saverthread.h"
 
 #include <QDir>
 
@@ -15,6 +16,8 @@ ApiTrace::ApiTrace()
             this, SIGNAL(startedLoadingTrace()));
     connect(m_loader, SIGNAL(finished()),
             this, SIGNAL(finishedLoadingTrace()));
+
+    m_saver = new SaverThread(this);
 }
 
 ApiTrace::~ApiTrace()
@@ -22,6 +25,7 @@ ApiTrace::~ApiTrace()
     qDeleteAll(m_calls);
     qDeleteAll(m_frames);
     delete m_loader;
+    delete m_saver;
 }
 
 bool ApiTrace::isCallAFrameMarker(const ApiTraceCall *call,
@@ -241,6 +245,8 @@ void ApiTrace::save()
     QDir dir;
     dir.mkpath(fi.absolutePath());
     m_needsSaving = false;
+
+    m_saver->saveFile(m_tempFileName, m_calls);
 }
 
 #include "apitrace.moc"
index 3a475b45cfc96498c3e051c3872c0ec0b2f452b2..54fc1f2713786b4fb2a503b47cdb8d29c78f199f 100644 (file)
@@ -7,6 +7,7 @@
 #include <QSet>
 
 class LoaderThread;
+class SaverThread;
 
 class ApiTrace : public QObject
 {
@@ -78,6 +79,7 @@ private:
     FrameMarker m_frameMarker;
 
     LoaderThread *m_loader;
+    SaverThread  *m_saver;
 
     QSet<ApiTraceCall*> m_editedCalls;
 
index ca9386c993f9522300606fb03a06622eb694de59..0e623c0cab1027e64ac2b51f30cad668bb4d2456 100644 (file)
@@ -285,6 +285,7 @@ void ApiTraceModel::callChanged(ApiTraceCall *call)
     qDebug()<<"\ttrace edited = "<<trace->edited();
     qDebug()<<"\ttrace file = "<<trace->fileName();
     qDebug()<<"\ttrace needs saving = "<<trace->needsSaving();
+    trace->save();
 }
 
 #include "apitracemodel.moc"
index 47a03a1c2e2fb44453aa4e0f35ca92dba0785f75..b8b1bfb4bf5d2a4d9ee1c081c4281fe7d4f2bb90 100644 (file)
@@ -99,7 +99,7 @@ createBitmaskSig(const ApiBitmask &bt, unsigned id)
     sig->values = values;
 
     int i = 0;
-    for (itr != bsig.constBegin(); itr != bsig.constEnd(); ++itr, ++i) {
+    for (itr = bsig.constBegin(); itr != bsig.constEnd(); ++itr, ++i) {
         values[i].name = qstrdup(itr->first.toLocal8Bit());
         values[i].value = itr->second;
     }
@@ -127,15 +127,39 @@ writeArgument(const QVariant &var, unsigned &id)
     int enumType    = QMetaType::type("ApiEnum");
     int type = var.userType();
 
+    Trace::BeginArg(++id);
     switch(type) {
     case QVariant::Bool:
-    case QVariant::ByteArray:
+        Trace::LiteralBool(var.toBool());
+        break;
+    case QVariant::ByteArray: {
+        QByteArray ba = var.toByteArray();
+        Trace::LiteralBlob((const void*)ba.constData(), ba.size());
+    }
+        break;
     case QVariant::Double:
+        Trace::LiteralFloat(var.toDouble());
+        break;
+    case QMetaType::Float:
+        Trace::LiteralFloat(var.toFloat());
+        break;
     case QVariant::Int:
+        Trace::LiteralSInt(var.toInt());
+        break;
     case QVariant::LongLong:
-    case QVariant::String:
+        Trace::LiteralSInt(var.toLongLong());
+        break;
+    case QVariant::String: {
+        QString str = var.toString();
+        Trace::LiteralString(str.toLocal8Bit().constData(), str.length());
+    }
+        break;
     case QVariant::UInt:
+        Trace::LiteralUInt(var.toInt());
+        break;
     case QVariant::ULongLong:
+        Trace::LiteralUInt(var.toLongLong());
+        break;
     default:
         if (type == arrayType) {
             ApiArray array = var.value<ApiArray>();
@@ -174,15 +198,13 @@ writeArgument(const QVariant &var, unsigned &id)
             Trace::EnumSig *sig = createEnumSig(apiEnum, ++id);
             Trace::LiteralEnum(sig);
             deleteEnumSig(sig);
-        } else if (type == QVariant::ByteArray) {
-            QByteArray ba = var.toByteArray();
-            Trace::LiteralBlob((const void*)ba.constData(), ba.size());
         } else {
             qWarning()<<"Unsupported write variant : "
                       << QMetaType::typeName(type);
         }
     }
 
+    Trace::EndArg();
 }
 
 
@@ -201,10 +223,10 @@ void SaverThread::saveFile(const QString &fileName,
 
 void SaverThread::run()
 {
-
-    Trace::Open();
+    qputenv("TRACE_PATH", m_fileName.toLocal8Bit());
     unsigned id = 0;
 
+    Trace::Open();
     for (int i = 0; i < m_calls.count(); ++i) {
         ApiTraceCall *call = m_calls[i];
         Trace::FunctionSig *funcSig = createFunctionSig(call, ++id);
@@ -213,7 +235,7 @@ void SaverThread::run()
             //args
             QVariantList vars = call->arguments();
             foreach(QVariant var, vars) {
-                writeArgument(var, id);
+                writeArgument(var, ++id);
             }
         }
         Trace::EndEnter();
@@ -222,7 +244,7 @@ void SaverThread::run()
             QVariant ret = call->returnValue();
             if (!ret.isNull()) {
                 Trace::BeginReturn();
-                writeArgument(ret, id);
+                writeArgument(ret, ++id);
                 Trace::EndReturn();
             }
         }
@@ -230,7 +252,6 @@ void SaverThread::run()
 
         deleteFunctionSig(funcSig);
     }
-
     Trace::Close();
 
     emit traceSaved(m_fileName);