44
55#pragma once
66
7+ #include < atomic>
78#include < os/signpost.h>
9+ #include < os/log.h>
810
911#define SIGNPOST_NAME " trace_region"
1012
1113namespace arcana
1214{
15+ enum class trace_level
16+ {
17+ mark,
18+ log,
19+ };
20+
1321 class trace_region final
1422 {
1523 public:
@@ -22,6 +30,10 @@ namespace arcana
2230 {
2331 if (m_id != OS_SIGNPOST_ID_NULL)
2432 {
33+ if (s_logEnabled)
34+ {
35+ os_log_debug (s_log, " [trace_region] BEGIN %s (id=%llu, this=%p)" , name, m_id, this );
36+ }
2537 os_signpost_interval_begin (s_log, m_id, SIGNPOST_NAME, " %s" , name);
2638 }
2739 }
@@ -36,6 +48,10 @@ namespace arcana
3648 {
3749 if (m_id != OS_SIGNPOST_ID_NULL)
3850 {
51+ if (s_logEnabled)
52+ {
53+ os_log_debug (s_log, " [trace_region] END (id=%llu, this=%p)" , m_id, this );
54+ }
3955 os_signpost_interval_end (s_log, m_id, SIGNPOST_NAME);
4056 }
4157 }
@@ -44,6 +60,10 @@ namespace arcana
4460 {
4561 if (m_id != OS_SIGNPOST_ID_NULL)
4662 {
63+ if (s_logEnabled)
64+ {
65+ os_log_debug (s_log, " [trace_region] END (move) (id=%llu, this=%p)" , m_id, this );
66+ }
4767 os_signpost_interval_end (s_log, m_id, SIGNPOST_NAME);
4868 }
4969
@@ -53,18 +73,21 @@ namespace arcana
5373 return *this ;
5474 }
5575
56- static void enable ()
76+ static void enable (trace_level level = trace_level::mark )
5777 {
5878 s_enabled = true ;
79+ s_logEnabled = level == trace_level::log;
5980 }
6081
6182 static void disable ()
6283 {
6384 s_enabled = false ;
85+ s_logEnabled = false ;
6486 }
6587
6688 private:
6789 static inline std::atomic<bool > s_enabled{false };
90+ static inline std::atomic<bool > s_logEnabled{false };
6891 static inline os_log_t s_log{os_log_create (" arcana" , OS_LOG_CATEGORY_POINTS_OF_INTEREST)};
6992 os_signpost_id_t m_id;
7093 };
0 commit comments