App: remove unused field layouts
[staging/windowmanager.git] / src / util.hpp
index 0703809..5d602ed 100644 (file)
 #define WM_UTIL_HPP
 
 #include <functional>
-#include <sys/poll.h>
-
+#include <thread>
 #include <vector>
 
+#include <sys/poll.h>
+
 extern "C" {
 #include <afb/afb-binding.h>
 };
 
+#define CONCAT_(X, Y) X##Y
+#define CONCAT(X, Y) CONCAT_(X, Y)
+
 #ifdef __GNUC__
 #define ATTR_FORMAT(stringindex, firsttocheck) \
    __attribute__((format(printf, stringindex, firsttocheck)))
@@ -49,15 +53,21 @@ extern "C" {
 #define logdebug(...)
 #endif
 
-#ifndef NDEBUG
-#define DB(expr)                                                           \
-   do {                                                                    \
-      std::ostringstream o;                                                \
-      o << __FILE__ << ":" << __LINE__ << ":" << __func__ << ": " << expr; \
-      logdebug("%s", o.str().c_str());                                     \
-   } while (0)
+#ifndef SCOPE_TRACING
+#define ST()
+#define STN(N)
 #else
-#define DB(expr)
+#define ST() \
+    ScopeTrace __attribute__((unused)) CONCAT(trace_scope_, __LINE__)(__func__)
+#define STN(N) \
+    ScopeTrace __attribute__((unused)) CONCAT(named_trace_scope_, __LINE__)(#N)
+
+struct ScopeTrace {
+   thread_local static int indent;
+   char const *f{};
+   explicit ScopeTrace(char const *func);
+   ~ScopeTrace();
+};
 #endif
 
 //      _                   _                 _                       __     _