]> git.cworth.org Git - apitrace/blobdiff - retrace.hpp
snapdiff: Add filename column to HTML report
[apitrace] / retrace.hpp
index 806d6ed9c944b328f451d3d4779810824b8da47b..dc11bb382243b13c51afe837c7fec40f6664a7de 100644 (file)
@@ -1,6 +1,6 @@
 /**************************************************************************
  *
- * Copyright 2011 Jose Fonseca
+ * Copyright 2011-2012 Jose Fonseca
  * All Rights Reserved.
  *
  * Permission is hereby granted, free of charge, to any person obtaining a copy
@@ -28,7 +28,9 @@
 
 #include <string.h>
 
+#include <list>
 #include <map>
+#include <ostream>
 
 #include "trace_model.hpp"
 
@@ -78,17 +80,82 @@ public:
 };
 
 
+/**
+ * Similar to alloca(), but implemented with malloc.
+ */
+class ScopedAllocator
+{
+private:
+    void *next;
+
+public:
+    ScopedAllocator() :
+        next(NULL) {
+    }
+
+    inline void *
+    alloc(size_t size) {
+        if (!size) {
+            return NULL;
+        }
+
+        void * * buf = static_cast<void **>(malloc(sizeof(void *) + size));
+        if (!buf) {
+            return NULL;
+        }
+
+        *buf = next;
+        next = buf;
+
+        return &buf[1];
+    }
+
+    template< class T >
+    inline T *
+    alloc(size_t n = 1) {
+        return static_cast<T *>(alloc(sizeof(T) * n));
+    }
+
+    inline
+    ~ScopedAllocator() {
+        while (next) {
+            void *temp = *static_cast<void **>(next);
+            free(next);
+            next = temp;
+        }
+    }
+};
+
+
+void
+addRegion(unsigned long long address, void *buffer, unsigned long long size);
+
+void
+delRegionByPointer(void *ptr);
+
+void *
+toPointer(trace::Value &value, bool bind = false);
+
+
 /**
  * Output verbosity when retracing files.
  */
 extern int verbosity;
 
+/**
+ * Add profiling data to the dump when retracing.
+ */
+extern bool profiling;
+
+
+std::ostream &warning(trace::Call &call);
 
-void ignore(Trace::Call &call);
-void retrace_unknown(Trace::Call &call);
 
+void ignore(trace::Call &call);
+void unsupported(trace::Call &call);
 
-typedef void (*Callback)(Trace::Call &call);
+
+typedef void (*Callback)(trace::Call &call);
 
 struct Entry {
     const char *name;
@@ -97,12 +164,15 @@ struct Entry {
 
 
 struct stringComparer {
-  bool operator() (const char *a, const  char *b) {
+  bool operator() (const char *a, const  char *b) const {
     return strcmp(a, b) < 0;
   }
 };
 
 
+extern const Entry stdc_callbacks[];
+
+
 class Retracer
 {
     typedef std::map<const char *, Callback, stringComparer> Map;
@@ -111,14 +181,16 @@ class Retracer
     std::vector<Callback> callbacks;
 
 public:
-    Retracer() {}
+    Retracer() {
+        addCallbacks(stdc_callbacks);
+    }
 
     virtual ~Retracer() {}
 
     void addCallback(const Entry *entry);
     void addCallbacks(const Entry *entries);
 
-    void retrace(Trace::Call &call);
+    void retrace(trace::Call &call);
 };