From 88158cf2b7153ea3f0d1dd5ed2a3afc984c0773b Mon Sep 17 00:00:00 2001 From: Ryan Tremblay Date: Thu, 13 Nov 2025 16:04:12 -0800 Subject: [PATCH 1/2] Add missing atomic include Add an option to also log --- Source/Android/arcana/tracing/trace_region.h | 2 +- Source/Apple/arcana/tracing/trace_region.h | 19 ++++++++++++++++++- Source/Unix/arcana/tracing/trace_region.h | 2 +- Source/Windows/arcana/tracing/trace_region.h | 2 +- 4 files changed, 21 insertions(+), 4 deletions(-) diff --git a/Source/Android/arcana/tracing/trace_region.h b/Source/Android/arcana/tracing/trace_region.h index 8754691..b2604cf 100644 --- a/Source/Android/arcana/tracing/trace_region.h +++ b/Source/Android/arcana/tracing/trace_region.h @@ -27,7 +27,7 @@ namespace arcana trace_region& operator=(trace_region&&) = default; - static void enable() + static void enable(bool = true) { } diff --git a/Source/Apple/arcana/tracing/trace_region.h b/Source/Apple/arcana/tracing/trace_region.h index 0789f74..c9c94ae 100644 --- a/Source/Apple/arcana/tracing/trace_region.h +++ b/Source/Apple/arcana/tracing/trace_region.h @@ -4,7 +4,9 @@ #pragma once +#include #include +#include #define SIGNPOST_NAME "trace_region" @@ -22,6 +24,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 +42,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 +54,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 +67,21 @@ namespace arcana return *this; } - static void enable() + static void enable(bool withLogging = false) { s_enabled = true; + s_logEnabled = withLogging; } 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..9325cc1 100644 --- a/Source/Unix/arcana/tracing/trace_region.h +++ b/Source/Unix/arcana/tracing/trace_region.h @@ -26,7 +26,7 @@ namespace arcana trace_region& operator=(trace_region&&) = default; - static void enable() + static void enable(bool = true) { } diff --git a/Source/Windows/arcana/tracing/trace_region.h b/Source/Windows/arcana/tracing/trace_region.h index 51a3069..0d3d59a 100644 --- a/Source/Windows/arcana/tracing/trace_region.h +++ b/Source/Windows/arcana/tracing/trace_region.h @@ -26,7 +26,7 @@ namespace arcana trace_region& operator=(trace_region&&) = default; - static void enable() + static void enable(bool = true) { } From c117bfda6fc855e8e63f6bfb8cf1b66d51026dcb Mon Sep 17 00:00:00 2001 From: Ryan Tremblay Date: Thu, 13 Nov 2025 19:03:02 -0800 Subject: [PATCH 2/2] Use level enum instead of boolean for api clarity --- Source/Android/arcana/tracing/trace_region.h | 8 +++++++- Source/Apple/arcana/tracing/trace_region.h | 10 ++++++++-- Source/Unix/arcana/tracing/trace_region.h | 8 +++++++- Source/Windows/arcana/tracing/trace_region.h | 8 +++++++- 4 files changed, 29 insertions(+), 5 deletions(-) diff --git a/Source/Android/arcana/tracing/trace_region.h b/Source/Android/arcana/tracing/trace_region.h index b2604cf..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(bool = true) + 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 c9c94ae..ad66cc3 100644 --- a/Source/Apple/arcana/tracing/trace_region.h +++ b/Source/Apple/arcana/tracing/trace_region.h @@ -12,6 +12,12 @@ namespace arcana { + enum class trace_level + { + mark, + log, + }; + class trace_region final { public: @@ -67,10 +73,10 @@ namespace arcana return *this; } - static void enable(bool withLogging = false) + static void enable(trace_level level = trace_level::mark) { s_enabled = true; - s_logEnabled = withLogging; + s_logEnabled = level == trace_level::log; } static void disable() diff --git a/Source/Unix/arcana/tracing/trace_region.h b/Source/Unix/arcana/tracing/trace_region.h index 9325cc1..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(bool = true) + 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 0d3d59a..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(bool = true) + static void enable(trace_level = trace_level::mark) { }