X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=common%2Ftrace_writer.cpp;h=d69e93fc9650211ca8d6418d173b027a4fa3cc26;hb=8b58e2fc73717437867a3a944dd34c4e917af9e7;hp=41f5e63894774ecc06bee85c6d50c2db4a3135b9;hpb=4159a6196b23dae0be22dde17a85783fe4036517;p=apitrace diff --git a/common/trace_writer.cpp b/common/trace_writer.cpp index 41f5e63..d69e93f 100644 --- a/common/trace_writer.cpp +++ b/common/trace_writer.cpp @@ -36,7 +36,7 @@ #include "trace_format.hpp" -namespace Trace { +namespace trace { Writer::Writer() : @@ -134,8 +134,9 @@ inline bool lookup(std::vector &map, size_t index) { } } -unsigned Writer::beginEnter(const FunctionSig *sig) { - _writeByte(Trace::EVENT_ENTER); +unsigned Writer::beginEnter(const FunctionSig *sig, unsigned thread_id) { + _writeByte(trace::EVENT_ENTER); + _writeUInt(thread_id); _writeUInt(sig->id); if (!lookup(functions, sig->id)) { _writeString(sig->name); @@ -150,34 +151,34 @@ unsigned Writer::beginEnter(const FunctionSig *sig) { } void Writer::endEnter(void) { - _writeByte(Trace::CALL_END); + _writeByte(trace::CALL_END); } void Writer::beginLeave(unsigned call) { - _writeByte(Trace::EVENT_LEAVE); + _writeByte(trace::EVENT_LEAVE); _writeUInt(call); } void Writer::endLeave(void) { - _writeByte(Trace::CALL_END); + _writeByte(trace::CALL_END); } void Writer::beginArg(unsigned index) { - _writeByte(Trace::CALL_ARG); + _writeByte(trace::CALL_ARG); _writeUInt(index); } void Writer::beginReturn(void) { - _writeByte(Trace::CALL_RET); + _writeByte(trace::CALL_RET); } void Writer::beginArray(size_t length) { - _writeByte(Trace::TYPE_ARRAY); + _writeByte(trace::TYPE_ARRAY); _writeUInt(length); } void Writer::beginStruct(const StructSig *sig) { - _writeByte(Trace::TYPE_STRUCT); + _writeByte(trace::TYPE_STRUCT); _writeUInt(sig->id); if (!lookup(structs, sig->id)) { _writeString(sig->name); @@ -189,32 +190,36 @@ void Writer::beginStruct(const StructSig *sig) { } } +void Writer::beginRepr(void) { + _writeByte(trace::TYPE_REPR); +} + void Writer::writeBool(bool value) { - _writeByte(value ? Trace::TYPE_TRUE : Trace::TYPE_FALSE); + _writeByte(value ? trace::TYPE_TRUE : trace::TYPE_FALSE); } void Writer::writeSInt(signed long long value) { if (value < 0) { - _writeByte(Trace::TYPE_SINT); + _writeByte(trace::TYPE_SINT); _writeUInt(-value); } else { - _writeByte(Trace::TYPE_UINT); + _writeByte(trace::TYPE_UINT); _writeUInt(value); } } void Writer::writeUInt(unsigned long long value) { - _writeByte(Trace::TYPE_UINT); + _writeByte(trace::TYPE_UINT); _writeUInt(value); } void Writer::writeFloat(float value) { - _writeByte(Trace::TYPE_FLOAT); + _writeByte(trace::TYPE_FLOAT); _writeFloat(value); } void Writer::writeDouble(double value) { - _writeByte(Trace::TYPE_DOUBLE); + _writeByte(trace::TYPE_DOUBLE); _writeDouble(value); } @@ -223,7 +228,7 @@ void Writer::writeString(const char *str) { Writer::writeNull(); return; } - _writeByte(Trace::TYPE_STRING); + _writeByte(trace::TYPE_STRING); _writeString(str); } @@ -232,7 +237,7 @@ void Writer::writeString(const char *str, size_t len) { Writer::writeNull(); return; } - _writeByte(Trace::TYPE_STRING); + _writeByte(trace::TYPE_STRING); _writeUInt(len); _write(str, len); } @@ -242,7 +247,7 @@ void Writer::writeWString(const wchar_t *str) { Writer::writeNull(); return; } - _writeByte(Trace::TYPE_STRING); + _writeByte(trace::TYPE_STRING); _writeString(""); } @@ -251,31 +256,35 @@ void Writer::writeBlob(const void *data, size_t size) { Writer::writeNull(); return; } - _writeByte(Trace::TYPE_BLOB); + _writeByte(trace::TYPE_BLOB); _writeUInt(size); if (size) { _write(data, size); } } -void Writer::writeEnum(const EnumSig *sig) { - _writeByte(Trace::TYPE_ENUM); +void Writer::writeEnum(const EnumSig *sig, signed long long value) { + _writeByte(trace::TYPE_ENUM); _writeUInt(sig->id); if (!lookup(enums, sig->id)) { - _writeString(sig->name); - Writer::writeSInt(sig->value); + _writeUInt(sig->num_values); + for (unsigned i = 0; i < sig->num_values; ++i) { + _writeString(sig->values[i].name); + writeSInt(sig->values[i].value); + } enums[sig->id] = true; } + writeSInt(value); } void Writer::writeBitmask(const BitmaskSig *sig, unsigned long long value) { - _writeByte(Trace::TYPE_BITMASK); + _writeByte(trace::TYPE_BITMASK); _writeUInt(sig->id); if (!lookup(bitmasks, sig->id)) { _writeUInt(sig->num_flags); for (unsigned i = 0; i < sig->num_flags; ++i) { if (i != 0 && sig->flags[i].value == 0) { - OS::DebugMessage("apitrace: warning: sig %s is zero but is not first flag\n", sig->flags[i].name); + os::log("apitrace: warning: sig %s is zero but is not first flag\n", sig->flags[i].name); } _writeString(sig->flags[i].name); _writeUInt(sig->flags[i].value); @@ -286,18 +295,18 @@ void Writer::writeBitmask(const BitmaskSig *sig, unsigned long long value) { } void Writer::writeNull(void) { - _writeByte(Trace::TYPE_NULL); + _writeByte(trace::TYPE_NULL); } -void Writer::writeOpaque(const void *addr) { +void Writer::writePointer(unsigned long long addr) { if (!addr) { Writer::writeNull(); return; } - _writeByte(Trace::TYPE_OPAQUE); - _writeUInt((size_t)addr); + _writeByte(trace::TYPE_OPAQUE); + _writeUInt(addr); } -} /* namespace Trace */ +} /* namespace trace */