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