@@ -157,6 +157,35 @@ namespace glz
157
157
std::ignore = glz::write_json (std::forward<Args>(args)..., event->args .str );
158
158
}
159
159
}
160
+
161
+ // Automatically adds the end event when it leave scope
162
+ struct duration_scoper final
163
+ {
164
+ trace& tr;
165
+
166
+ duration_scoper (trace& tr, const std::string_view name) noexcept : tr(tr), name(name) { tr.begin (name); }
167
+ ~duration_scoper () noexcept { tr.end (name); }
168
+
169
+ const std::string_view name{};
170
+ };
171
+
172
+ struct async_scoper final
173
+ {
174
+ trace& tr;
175
+
176
+ async_scoper (trace& tr, const std::string_view name) noexcept : tr(tr), name(name) { tr.begin (name); }
177
+ ~async_scoper () noexcept { tr.end (name); }
178
+
179
+ const std::string_view name{};
180
+ };
181
+
182
+ duration_scoper scope (const std::string_view name) {
183
+ return {*this , name};
184
+ }
185
+
186
+ async_scoper async_scope (const std::string_view name) {
187
+ return {*this , name};
188
+ }
160
189
};
161
190
162
191
template <>
@@ -165,85 +194,14 @@ namespace glz
165
194
using T = trace;
166
195
static constexpr auto value = object(&T::traceEvents, &T::displayTimeUnit);
167
196
};
168
-
169
- // Global approach to user a trace
170
- // instead of calling: my_trace.begin("my event");
171
- // you can call: glz::trace_begin("my event");
172
- template <size_t I>
173
- inline trace& global_trace () noexcept
174
- {
175
- static trace trc{};
176
- return trc;
177
- }
178
-
179
- template <size_t I>
180
- inline void enable_trace () noexcept
181
- {
182
- global_trace<0 >().disabled = false ;
183
- }
184
-
185
- template <size_t I>
186
- inline void disable_trace () noexcept
187
- {
188
- global_trace<0 >().disabled = true ;
189
- }
190
-
197
+
191
198
template <opts Opts = opts{}>
192
- [[nodiscard]] error_ctx write_file_trace (const std::string& file_name, auto && buffer) noexcept
199
+ [[nodiscard]] error_ctx write_file_trace (const trace& result, const std::string& file_name, auto && buffer) noexcept
193
200
{
194
- const auto ec = write <set_json<Opts>()>(global_trace< 0 >() , buffer);
201
+ const auto ec = write <set_json<Opts>()>(result , buffer);
195
202
if (bool (ec)) [[unlikely]] {
196
203
return ec;
197
204
}
198
205
return {buffer_to_file (buffer, file_name)};
199
206
}
200
-
201
- template <class ... Args>
202
- requires (sizeof ...(Args) <= 1 )
203
- constexpr void trace_begin (const std::string_view name, Args&&... args) noexcept
204
- {
205
- auto & trc = global_trace<0 >();
206
- trc.begin (name, std::forward<Args>(args)...);
207
- }
208
-
209
- template <class ... Args>
210
- requires (sizeof ...(Args) <= 1 )
211
- constexpr void trace_end (const std::string_view name, Args&&... args) noexcept
212
- {
213
- auto & trc = global_trace<0 >();
214
- trc.end (name, std::forward<Args>(args)...);
215
- }
216
-
217
- template <class ... Args>
218
- requires (sizeof ...(Args) <= 1 )
219
- constexpr void trace_async_begin (const std::string_view name, Args&&... args) noexcept
220
- {
221
- auto & trc = global_trace<0 >();
222
- trc.async_begin (name, std::forward<Args>(args)...);
223
- }
224
-
225
- template <class ... Args>
226
- requires (sizeof ...(Args) <= 1 )
227
- constexpr void trace_async_end (const std::string_view name, Args&&... args) noexcept
228
- {
229
- auto & trc = global_trace<0 >();
230
- trc.async_end (name, std::forward<Args>(args)...);
231
- }
232
-
233
- // Automatically adds the end event when it leave scope
234
- struct duration_trace final
235
- {
236
- duration_trace (const std::string_view name) noexcept : name(name) { trace_begin (name); }
237
- ~duration_trace () noexcept { trace_end (name); }
238
-
239
- const std::string_view name{};
240
- };
241
-
242
- struct async_trace final
243
- {
244
- async_trace (const std::string_view name) noexcept : name(name) { trace_async_begin (name); }
245
- ~async_trace () noexcept { trace_async_end (name); }
246
-
247
- const std::string_view name{};
248
- };
249
207
}
0 commit comments