From d809a061b7980ab874e83fd14d5b43b170dbecb1 Mon Sep 17 00:00:00 2001 From: Zack Rusin Date: Sun, 17 Apr 2011 23:30:58 -0400 Subject: [PATCH] Do some initial saving. --- gui/apitrace.cpp | 6 ++++++ gui/apitrace.h | 2 ++ gui/apitracemodel.cpp | 1 + gui/saverthread.cpp | 43 ++++++++++++++++++++++++++++++++----------- 4 files changed, 41 insertions(+), 11 deletions(-) diff --git a/gui/apitrace.cpp b/gui/apitrace.cpp index 7d02b5d..e98eeff 100644 --- a/gui/apitrace.cpp +++ b/gui/apitrace.cpp @@ -1,6 +1,7 @@ #include "apitrace.h" #include "loaderthread.h" +#include "saverthread.h" #include @@ -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" diff --git a/gui/apitrace.h b/gui/apitrace.h index 3a475b4..54fc1f2 100644 --- a/gui/apitrace.h +++ b/gui/apitrace.h @@ -7,6 +7,7 @@ #include class LoaderThread; +class SaverThread; class ApiTrace : public QObject { @@ -78,6 +79,7 @@ private: FrameMarker m_frameMarker; LoaderThread *m_loader; + SaverThread *m_saver; QSet m_editedCalls; diff --git a/gui/apitracemodel.cpp b/gui/apitracemodel.cpp index ca9386c..0e623c0 100644 --- a/gui/apitracemodel.cpp +++ b/gui/apitracemodel.cpp @@ -285,6 +285,7 @@ void ApiTraceModel::callChanged(ApiTraceCall *call) qDebug()<<"\ttrace edited = "<edited(); qDebug()<<"\ttrace file = "<fileName(); qDebug()<<"\ttrace needs saving = "<needsSaving(); + trace->save(); } #include "apitracemodel.moc" diff --git a/gui/saverthread.cpp b/gui/saverthread.cpp index 47a03a1..b8b1bfb 100644 --- a/gui/saverthread.cpp +++ b/gui/saverthread.cpp @@ -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(); @@ -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); -- 2.43.0