]> git.cworth.org Git - apitrace/blobdiff - common/trace_writer.cpp
Use skiplist-based FastCallSet within trace::CallSet
[apitrace] / common / trace_writer.cpp
index 897c7b159f346423b46a79876981ebf465b7c97c..d69e93fc9650211ca8d6418d173b027a4fa3cc26 100644 (file)
@@ -134,8 +134,9 @@ inline bool lookup(std::vector<bool> &map, size_t index) {
     }
 }
 
-unsigned Writer::beginEnter(const FunctionSig *sig) {
+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);
@@ -189,6 +190,10 @@ 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);
 }
@@ -258,14 +263,18 @@ void Writer::writeBlob(const void *data, size_t size) {
     }
 }
 
-void Writer::writeEnum(const EnumSig *sig) {
+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) {
@@ -289,13 +298,13 @@ void Writer::writeNull(void) {
     _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);
+    _writeUInt(addr);
 }