#include "saverthread.h"
-#include "trace_write.hpp"
+#include "trace_writer.hpp"
#include <QFile>
#include <QHash>
QStringList args = call->argNames();
sig->num_args = args.count();
- sig->args = new const char*[args.count()];
+ sig->arg_names = new const char*[args.count()];
for (int i = 0; i < args.count(); ++i) {
- sig->args[i] = qstrdup(args[i].toLocal8Bit());
+ sig->arg_names[i] = qstrdup(args[i].toLocal8Bit());
}
return sig;
deleteFunctionSig(Trace::FunctionSig *sig)
{
for (int i = 0; i < sig->num_args; ++i) {
- delete [] sig->args[i];
+ delete [] sig->arg_names[i];
}
- delete [] sig->args;
+ delete [] sig->arg_names;
delete [] sig->name;
delete sig;
}
sig->id = id;
sig->name = qstrdup(aSig.name.toLocal8Bit());
sig->num_members = aSig.memberNames.count();
- char **members = new char*[aSig.memberNames.count()];
- sig->members = (const char **)members;
+ char **member_names = new char*[aSig.memberNames.count()];
+ sig->member_names = (const char **)member_names;
for (int i = 0; i < aSig.memberNames.count(); ++i) {
- members[i] = qstrdup(aSig.memberNames[i].toLocal8Bit());
+ member_names[i] = qstrdup(aSig.memberNames[i].toLocal8Bit());
}
return sig;
}
deleteStructSig(Trace::StructSig *sig)
{
for (int i = 0; i < sig->num_members; ++i) {
- delete [] sig->members[i];
+ delete [] sig->member_names[i];
}
- delete [] sig->members;
+ delete [] sig->member_names;
delete [] sig->name;
delete sig;
}
ApiBitmask::Signature::const_iterator itr;
Trace::BitmaskSig *sig = new Trace::BitmaskSig();
- Trace::BitmaskVal *values = new Trace::BitmaskVal[bsig.count()];
+ Trace::BitmaskFlag *flags = new Trace::BitmaskFlag[bsig.count()];
sig->id = id;
- sig->count = bsig.count();
- sig->values = values;
+ sig->num_flags = bsig.count();
+ sig->flags = flags;
int i = 0;
for (itr = bsig.constBegin(); itr != bsig.constEnd(); ++itr, ++i) {
- values[i].name = qstrdup(itr->first.toLocal8Bit());
- values[i].value = itr->second;
+ flags[i].name = qstrdup(itr->first.toLocal8Bit());
+ flags[i].value = itr->second;
}
return sig;
static void
deleteBitmaskSig(Trace::BitmaskSig *sig)
{
- for (int i = 0; i < sig->count; ++i) {
- delete [] sig->values[i].name;
+ for (int i = 0; i < sig->num_flags; ++i) {
+ delete [] sig->flags[i].name;
}
- delete [] sig->values;
+ delete [] sig->flags;
delete sig;
}
static void
-writeValue(const QVariant &var, unsigned &id)
+writeValue(Trace::Writer &writer, const QVariant &var, unsigned &id)
{
int arrayType = QMetaType::type("ApiArray");
int bitmaskType = QMetaType::type("ApiBitmask");
switch(type) {
case QVariant::Bool:
- Trace::LiteralBool(var.toBool());
+ writer.writeBool(var.toBool());
break;
case QVariant::ByteArray: {
QByteArray ba = var.toByteArray();
- Trace::LiteralBlob((const void*)ba.constData(), ba.size());
+ writer.writeBlob((const void*)ba.constData(), ba.size());
}
break;
case QVariant::Double:
- Trace::LiteralFloat(var.toDouble());
+ writer.writeDouble(var.toDouble());
break;
case QMetaType::Float:
- Trace::LiteralFloat(var.toFloat());
+ writer.writeFloat(var.toFloat());
break;
case QVariant::Int:
- Trace::LiteralSInt(var.toInt());
+ writer.writeSInt(var.toInt());
break;
case QVariant::LongLong:
- Trace::LiteralSInt(var.toLongLong());
+ writer.writeSInt(var.toLongLong());
break;
case QVariant::String: {
QString str = var.toString();
- Trace::LiteralString(str.toLocal8Bit().constData(), str.length());
+ writer.writeString(str.toLocal8Bit().constData(), str.length());
}
break;
case QVariant::UInt:
- Trace::LiteralUInt(var.toInt());
+ writer.writeUInt(var.toInt());
break;
case QVariant::ULongLong:
- Trace::LiteralUInt(var.toLongLong());
+ writer.writeUInt(var.toLongLong());
break;
default:
if (type == arrayType) {
ApiArray array = var.value<ApiArray>();
QList<QVariant> vals = array.values();
- Trace::BeginArray(vals.count());
+ writer.beginArray(vals.count());
foreach(QVariant el, vals) {
- Trace::BeginElement();
- writeValue(el, ++id);
- Trace::EndElement();
+ writer.beginElement();
+ writeValue(writer, el, ++id);
+ writer.endElement();
}
- Trace::EndArray();
+ writer.endArray();
} else if (type == bitmaskType) {
ApiBitmask bm = var.value<ApiBitmask>();
Trace::BitmaskSig *sig = createBitmaskSig(bm, ++id);
- LiteralBitmask(*sig, bm.value());
+ writer.writeBitmask(sig, bm.value());
deleteBitmaskSig(sig);
} else if (type == structType) {
ApiStruct apiStr = var.value<ApiStruct>();
QList<QVariant> vals = apiStr.values();
Trace::StructSig *str = createStructSig(apiStr, ++id);
- Trace::BeginStruct(str);
+ writer.beginStruct(str);
foreach(QVariant val, vals) {
- writeValue(val, ++id);
+ writeValue(writer, val, ++id);
}
- Trace::EndStruct();
+ writer.endStruct();
deleteStructSig(str);
} else if (type == pointerType) {
ApiPointer apiPtr = var.value<ApiPointer>();
- Trace::BeginArray(1);
- Trace::BeginElement();
- Trace::LiteralOpaque((const void*)apiPtr.value());
- Trace::EndElement();
- Trace::EndArray();
+ //writer.beginArray(1);
+ //writer.beginElement();
+ writer.writeOpaque((const void*)apiPtr.value());
+ //writer.endElement();
+ //writer.endArray();
} else if (type == enumType) {
ApiEnum apiEnum = var.value<ApiEnum>();
Trace::EnumSig *sig = createEnumSig(apiEnum, ++id);
- Trace::LiteralEnum(sig);
+ writer.writeEnum(sig);
deleteEnumSig(sig);
} else {
qWarning()<<"Unsupported write variant : "
}
void SaverThread::saveFile(const QString &fileName,
- const QList<ApiTraceCall*> &calls)
+ const QVector<ApiTraceCall*> &calls)
{
m_fileName = fileName;
m_calls = calls;
void SaverThread::run()
{
- qputenv("TRACE_PATH", m_fileName.toLocal8Bit());
unsigned id = 0;
-
- Trace::Open();
+ qDebug() << "Saving : " << m_fileName;
+ Trace::Writer writer;
+ writer.open(m_fileName.toLocal8Bit());
for (int i = 0; i < m_calls.count(); ++i) {
ApiTraceCall *call = m_calls[i];
Trace::FunctionSig *funcSig = createFunctionSig(call, ++id);
- unsigned callNo = Trace::BeginEnter(*funcSig);
+ unsigned callNo = writer.beginEnter(funcSig);
{
//args
- QVariantList vars = call->arguments();
+ QVector<QVariant> vars = call->arguments();
int index = 0;
foreach(QVariant var, vars) {
- Trace::BeginArg(index++);
- writeValue(var, ++id);
- Trace::EndArg();
+ writer.beginArg(index++);
+ writeValue(writer, var, ++id);
+ writer.endArg();
}
}
- Trace::EndEnter();
- Trace::BeginLeave(callNo);
+ writer.endEnter();
+ writer.beginLeave(callNo);
{
QVariant ret = call->returnValue();
if (!ret.isNull()) {
- Trace::BeginReturn();
- writeValue(ret, ++id);
- Trace::EndReturn();
+ writer.beginReturn();
+ writeValue(writer, ret, ++id);
+ writer.endReturn();
}
}
- Trace::EndLeave();
+ writer.endLeave();
deleteFunctionSig(funcSig);
}
- Trace::Close();
+ writer.close();
- emit traceSaved(m_fileName);
+ emit traceSaved();
}
#include "saverthread.moc"