Skip to content

Commit c02527c

Browse files
authored
Add optional logging to trace region (#51)
* Add missing atomic include Add an option to also log * Use level enum instead of boolean for api clarity
1 parent 743f2da commit c02527c

File tree

4 files changed

+45
-4
lines changed

4 files changed

+45
-4
lines changed

Source/Android/arcana/tracing/trace_region.h

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,12 @@
66

77
namespace arcana
88
{
9+
enum class trace_level
10+
{
11+
mark,
12+
log,
13+
};
14+
915
// TODO: https://developer.android.com/topic/performance/tracing/custom-events-native
1016
// https://developer.android.com/ndk/reference/group/tracing
1117
class trace_region final
@@ -27,7 +33,7 @@ namespace arcana
2733

2834
trace_region& operator=(trace_region&&) = default;
2935

30-
static void enable()
36+
static void enable(trace_level = trace_level::mark)
3137
{
3238
}
3339

Source/Apple/arcana/tracing/trace_region.h

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,20 @@
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

1113
namespace 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
};

Source/Unix/arcana/tracing/trace_region.h

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,12 @@
66

77
namespace arcana
88
{
9+
enum class trace_level
10+
{
11+
mark,
12+
log,
13+
};
14+
915
// TODO
1016
class trace_region final
1117
{
@@ -26,7 +32,7 @@ namespace arcana
2632

2733
trace_region& operator=(trace_region&&) = default;
2834

29-
static void enable()
35+
static void enable(trace_level = trace_level::mark)
3036
{
3137
}
3238

Source/Windows/arcana/tracing/trace_region.h

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,12 @@
66

77
namespace arcana
88
{
9+
enum class trace_level
10+
{
11+
mark,
12+
log,
13+
};
14+
915
// TODO: https://docs.microsoft.com/en-us/windows/win32/tracelogging/tracelogging-native-quick-start
1016
class trace_region final
1117
{
@@ -26,7 +32,7 @@ namespace arcana
2632

2733
trace_region& operator=(trace_region&&) = default;
2834

29-
static void enable()
35+
static void enable(trace_level = trace_level::mark)
3036
{
3137
}
3238

0 commit comments

Comments
 (0)