]> git.cworth.org Git - apitrace/blobdiff - trace_write.cpp
More efficient call representation.
[apitrace] / trace_write.cpp
index 912824e012d936db5ef8bc0b478771c7608788d0..3860e319e6de795aeebe63f7ca7ce1db3df9ed20 100644 (file)
@@ -170,11 +170,23 @@ void Close(void) {
 
 static unsigned call_no = 0;
 
-unsigned BeginEnter(const char *function) {
+static std::map<Id, bool> functions;
+static std::map<Id, bool> bitmasks;
+
+
+unsigned BeginEnter(const FunctionSig &function) {
    OS::AcquireMutex();
    Open();
    WriteByte(Trace::EVENT_ENTER);
-   WriteName(function);
+   WriteUInt(function.id);
+   if (!functions[function.id]) {
+      WriteString(function.name);
+      WriteUInt(function.num_args);
+      for (unsigned i = 0; i < function.num_args; ++i) {
+         WriteString(function.args[i]);
+      }
+      functions[function.id] = true;
+   }
    return call_no++;
 }
 
@@ -196,10 +208,9 @@ void EndLeave(void) {
    OS::ReleaseMutex();
 }
 
-void BeginArg(unsigned index, const char *name) {
+void BeginArg(unsigned index) {
    WriteByte(Trace::CALL_ARG);
    WriteUInt(index);
-   WriteName(name);
 }
 
 void BeginReturn(void) {
@@ -303,8 +314,6 @@ void LiteralNamedConstant(const char *name, long long value) {
    LiteralSInt(value);
 }
 
-static std::map<Id, bool> bitmasks;
-
 void LiteralBitmask(const BitmaskSig &bitmask, unsigned long long value) {
    WriteByte(Trace::TYPE_BITMASK);
    WriteUInt(bitmask.id);