CeresEngine
0.2.0
A game development framework
Loading...
Searching...
No Matches
Profiler.hpp
Go to the documentation of this file.
1
//
2
// CeresEngine - A game development framework
3
//
4
// Created by Rogiel Sulzbach.
5
// Copyright (c) 2018-2022 Rogiel Sulzbach. All rights reserved.
6
//
7
8
#pragma once
9
10
#if defined(TRACY_ENABLE)
11
#include <tracy/Tracy.hpp>
12
#if defined(TRACY_ENABLE)
13
#define CE_PROFILING
14
#if defined(CE_PROFILING)
15
#define CE_MEMORY_PROFILING
16
#define CE_MEMORY_PROFILING_CALLSTACK_LENGTH 0
17
#endif
18
#endif
19
20
#define CE_PROFILER_CONNECTED TracyIsConnected
21
22
#define CE_PROFILER_FMT(Func, F, ...) \
23
[&]() { \
24
TemporaryAllocator temporaryAllocator; \
25
Func(TemporaryString::fromFormat(temporaryAllocator, F, __VA_ARGS__)); \
26
}()
27
28
#define CE_FRAME_START(...) FrameMarkStart(__VA_ARGS__)
29
#define CE_FRAME_END(...) FrameMarkEnd(__VA_ARGS__)
30
31
#define CE_PROFILE_FUNC ZoneScoped
32
#define CE_PROFILE(...) ZoneScopedN(__VA_ARGS__)
33
34
#define CE_PROFILE_TEXT(N, S) ZoneText(N, S)
35
#define CE_PROFILE_TEXT_STR(N) CE_PROFILE_TEXT(N.data(), N.size())
36
37
#define CE_PROFILE_TEXT_FMT(F, ...) CE_PROFILER_FMT(CE_PROFILE_TEXT_STR, F, __VA_ARGS__);
38
39
#define CE_COUNTER_CONFIG(N, T) TracyPlotConfig(N, tracy::PlotFormatType::T, false, true, 0)
40
#define CE_COUNTER_SET(N, V) TracyPlot(N, V)
41
42
#if defined(CE_MEMORY_PROFILING)
43
#if defined(CE_MEMORY_PROFILING_CALLSTACK_LENGTH) && CE_MEMORY_PROFILING_CALLSTACK_LENGTH != 0
44
#define CE_PROFILE_MEM_ALLOC(P, N) \
45
[&]() { \
46
void* const p = P; \
47
TracyAllocS(p, N, CE_MEMORY_PROFILING_CALLSTACK_LENGTH); \
48
return p; \
49
}()
50
#define CE_PROFILE_MEM_FREE(P) \
51
[&]() { \
52
void* const p = P; \
53
TracyFreeS(p, CE_MEMORY_PROFILING_CALLSTACK_LENGTH); \
54
return p; \
55
}()
56
57
#define CE_PROFILE_POOL_ALLOC(P, S, N) \
58
[&]() { \
59
void* const p = P; \
60
TracyAllocNS(p, S, CE_MEMORY_PROFILING_CALLSTACK_LENGTH, N); \
61
return p; \
62
}()
63
#define CE_PROFILE_POOL_FREE(P, N) \
64
[&]() { \
65
void* const p = P; \
66
TracyFreeNS(p, CE_MEMORY_PROFILING_CALLSTACK_LENGTH, N); \
67
return p; \
68
}()
69
#else
70
#define CE_PROFILE_MEM_ALLOC(P, S) \
71
[&]() { \
72
void* const p = P; \
73
TracyAlloc(p, S); \
74
return p; \
75
}()
76
#define CE_PROFILE_MEM_FREE(P) \
77
[&]() { \
78
void* const p = P; \
79
TracyFree(p); \
80
return p; \
81
}()
82
83
#define CE_PROFILE_POOL_ALLOC(P, S, N) \
84
[&]() { \
85
void* const p = P; \
86
TracyAllocN(p, S, N); \
87
return p; \
88
}()
89
#define CE_PROFILE_POOL_FREE(P, N) \
90
[&]() { \
91
void* const p = P; \
92
TracyFreeN(p, N); \
93
return p; \
94
}()
95
#endif
96
#else
97
#define CE_PROFILE_MEM_ALLOC(P, N) (decltype(P))P
98
#define CE_PROFILE_MEM_FREE(P) (decltype(P))P
99
100
#define CE_PROFILE_POOL_ALLOC(P, S, N) (decltype(P))P
101
#define CE_PROFILE_POOL_FREE(P, N) (decltype(P))P
102
#endif
103
104
#define CE_PROFILE_MSG(N, S) TracyMessage(N, S)
105
#define CE_PROFILE_MSG_STR(N) CE_PROFILE_MSG(N.data(), N.size())
106
#define CE_PROFILE_MSG_FMT(F, ...) CE_PROFILER_FMT(CE_PROFILE_MSG_STR, F, __VA_ARGS__);
107
#else
108
#define CE_PROFILER_CONNECTED false
109
110
#define CE_PROFILER_FMT(Func, F, ...)
111
112
#define CE_FRAME_START(...)
113
#define CE_FRAME_END(...)
114
115
#define CE_PROFILE_FUNC
116
#define CE_PROFILE(...)
117
118
#define CE_PROFILE_TEXT(N, S)
119
#define CE_PROFILE_TEXT_STR(N)
120
121
#define CE_PROFILE_TEXT_FMT(F, ...)
122
123
#define CE_COUNTER_CONFIG(N, T)
124
#define CE_COUNTER_SET(N, V)
125
126
#define CE_PROFILE_MEM_ALLOC(P, N) (decltype(P))P
127
#define CE_PROFILE_MEM_FREE(P) (decltype(P))P
128
129
#define CE_PROFILE_POOL_ALLOC(P, S, N) (decltype(P))P
130
#define CE_PROFILE_POOL_FREE(P, N) (decltype(P))P
131
132
#define CE_PROFILE_MSG(N, S)
133
#define CE_PROFILE_MSG_STR(N)
134
#define CE_PROFILE_MSG_FMT(F, ...)
135
#endif
Sources
CeresEngine
Foundation
Profiler.hpp
Generated by
1.9.8