diff --git a/Source/Android/arcana/tracing/trace_region.h b/Source/Android/arcana/tracing/trace_region.h index 8754691..cd3b650 100644 --- a/Source/Android/arcana/tracing/trace_region.h +++ b/Source/Android/arcana/tracing/trace_region.h @@ -6,6 +6,12 @@ namespace arcana { + enum class trace_level + { + mark, + log, + }; + // TODO: https://developer.android.com/topic/performance/tracing/custom-events-native // https://developer.android.com/ndk/reference/group/tracing class trace_region final @@ -27,7 +33,7 @@ namespace arcana trace_region& operator=(trace_region&&) = default; - static void enable() + static void enable(trace_level = trace_level::mark) { } diff --git a/Source/Apple/arcana/tracing/trace_region.h b/Source/Apple/arcana/tracing/trace_region.h index 0789f74..ad66cc3 100644 --- a/Source/Apple/arcana/tracing/trace_region.h +++ b/Source/Apple/arcana/tracing/trace_region.h @@ -4,12 +4,20 @@ #pragma once +#include #include +#include #define SIGNPOST_NAME "trace_region" namespace arcana { + enum class trace_level + { + mark, + log, + }; + class trace_region final { public: @@ -22,6 +30,10 @@ namespace arcana { if (m_id != OS_SIGNPOST_ID_NULL) { + if (s_logEnabled) + { + os_log_debug(s_log, "[trace_region] BEGIN %s (id=%llu, this=%p)", name, m_id, this); + } os_signpost_interval_begin(s_log, m_id, SIGNPOST_NAME, "%s", name); } } @@ -36,6 +48,10 @@ namespace arcana { if (m_id != OS_SIGNPOST_ID_NULL) { + if (s_logEnabled) + { + os_log_debug(s_log, "[trace_region] END (id=%llu, this=%p)", m_id, this); + } os_signpost_interval_end(s_log, m_id, SIGNPOST_NAME); } } @@ -44,6 +60,10 @@ namespace arcana { if (m_id != OS_SIGNPOST_ID_NULL) { + if (s_logEnabled) + { + os_log_debug(s_log, "[trace_region] END (move) (id=%llu, this=%p)", m_id, this); + } os_signpost_interval_end(s_log, m_id, SIGNPOST_NAME); } @@ -53,18 +73,21 @@ namespace arcana return *this; } - static void enable() + static void enable(trace_level level = trace_level::mark) { s_enabled = true; + s_logEnabled = level == trace_level::log; } static void disable() { s_enabled = false; + s_logEnabled = false; } private: static inline std::atomic s_enabled{false}; + static inline std::atomic s_logEnabled{false}; static inline os_log_t s_log{os_log_create("arcana", OS_LOG_CATEGORY_POINTS_OF_INTEREST)}; os_signpost_id_t m_id; }; diff --git a/Source/Unix/arcana/tracing/trace_region.h b/Source/Unix/arcana/tracing/trace_region.h index ac05e26..1c0e242 100644 --- a/Source/Unix/arcana/tracing/trace_region.h +++ b/Source/Unix/arcana/tracing/trace_region.h @@ -6,6 +6,12 @@ namespace arcana { + enum class trace_level + { + mark, + log, + }; + // TODO class trace_region final { @@ -26,7 +32,7 @@ namespace arcana trace_region& operator=(trace_region&&) = default; - static void enable() + static void enable(trace_level = trace_level::mark) { } diff --git a/Source/Windows/arcana/tracing/trace_region.h b/Source/Windows/arcana/tracing/trace_region.h index 51a3069..b728a65 100644 --- a/Source/Windows/arcana/tracing/trace_region.h +++ b/Source/Windows/arcana/tracing/trace_region.h @@ -6,6 +6,12 @@ namespace arcana { + enum class trace_level + { + mark, + log, + }; + // TODO: https://docs.microsoft.com/en-us/windows/win32/tracelogging/tracelogging-native-quick-start class trace_region final { @@ -26,7 +32,7 @@ namespace arcana trace_region& operator=(trace_region&&) = default; - static void enable() + static void enable(trace_level = trace_level::mark) { }