util: add ability to disable afb logging macro usage
[staging/windowmanager.git] / src / util.hpp
index e285c0f..b3f43de 100644 (file)
@@ -1,14 +1,36 @@
+/*
+ * Copyright (C) 2017 Mentor Graphics Development (Deutschland) GmbH
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
 #ifndef WM_UTIL_HPP
 #define WM_UTIL_HPP
 
 #include <functional>
-#include <sys/poll.h>
-
+#include <thread>
 #include <vector>
 
+#include <sys/poll.h>
+
+#ifndef DO_NOT_USE_AFB
 extern "C" {
 #include <afb/afb-binding.h>
 };
+#endif
+
+#define CONCAT_(X, Y) X##Y
+#define CONCAT(X, Y) CONCAT_(X, Y)
 
 #ifdef __GNUC__
 #define ATTR_FORMAT(stringindex, firsttocheck) \
@@ -19,6 +41,7 @@ extern "C" {
 #define ATTR_NORETURN
 #endif
 
+#ifdef AFB_BINDING_VERSION
 #define lognotice(...) AFB_NOTICE(__VA_ARGS__)
 #define logerror(...) AFB_ERROR(__VA_ARGS__)
 #define fatal(...)            \
@@ -26,24 +49,41 @@ extern "C" {
       AFB_ERROR(__VA_ARGS__); \
       abort();                \
    } while (0)
+#else
+#define lognotice(...)
+#define logerror(...)
+#define fatal(...)            \
+   do {                       \
+      abort();                \
+   } while (0)
+#endif
 
 #ifdef DEBUG_OUTPUT
+#ifdef AFB_BINDING_VERSION
 #define logdebug(...) AFB_DEBUG(__VA_ARGS__)
 #else
 #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)
 #else
-#define DB(expr)
+#define logdebug(...)
 #endif
 
+#ifndef SCOPE_TRACING
+#define ST()
+#define STN(N)
+#else
+#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
 
 //      _                   _                 _                       __     _
 //  ___| |_ _ __ _   _  ___| |_   _   _ _ __ (_) __ _ _   _  ___     / _| __| |
@@ -66,19 +106,4 @@ struct unique_fd {
    }
 };
 
-//      _                   _     ____       _ _
-//  ___| |_ _ __ _   _  ___| |_  |  _ \ ___ | | | ___ _ __
-// / __| __| '__| | | |/ __| __| | |_) / _ \| | |/ _ \ '__|
-// \__ \ |_| |  | |_| | (__| |_  |  __/ (_) | | |  __/ |
-// |___/\__|_|   \__,_|\___|\__| |_|   \___/|_|_|\___|_|
-//
-struct Poller {
-   std::vector<std::function<int(int)>> handlers;
-   std::vector<struct pollfd> pfds;
-
-   Poller() = default;
-   void add_fd(int fd, std::function<int(int)> handler);
-   int check_events();
-};
-
 #endif  // !WM_UTIL_HPP