84 return "TraceCategory?";
208 std::chrono::steady_clock::time_point
time =
209 std::chrono::steady_clock::now();
236ARIA_ABI_API std::shared_ptr<TraceSink>& global_sink_storage_()
noexcept;
238ARIA_ABI_API std::atomic<bool>& trace_sink_present_()
noexcept;
239ARIA_ABI_API void dispatch_trace_(
const std::shared_ptr<TraceSink>& sink,
245inline std::shared_ptr<TraceSink>
246swap_global_sink_(std::shared_ptr<TraceSink> next)
noexcept {
247 std::lock_guard lk(global_sink_mutex_());
248 auto& slot = global_sink_storage_();
249 auto prev = std::move(slot);
250 slot = std::move(next);
251 trace_sink_present_().store(
static_cast<bool>(slot), std::memory_order_release);
258inline std::shared_ptr<TraceSink> snapshot_global_sink_()
noexcept {
259 std::lock_guard lk(global_sink_mutex_());
260 return global_sink_storage_();
272 detail::swap_global_sink_(
273 sink ? std::make_shared<TraceSink>(std::move(sink))
274 : std::shared_ptr<TraceSink>{});
280 detail::swap_global_sink_({});
287 return detail::trace_sink_present_().load(std::memory_order_acquire);
294 auto sink = detail::snapshot_global_sink_();
295 if (sink && *sink) detail::dispatch_trace_(sink, event);
307template<
class Payload>
308concept TracePayloadType =
309 std::same_as<Payload, trace::Reactive> || std::same_as<Payload, trace::Async> ||
310 std::same_as<Payload, trace::Binding> || std::same_as<Payload, trace::Command> ||
311 std::same_as<Payload, trace::Validation> || std::same_as<Payload, trace::List>;
316template<detail::TracePayloadType Payload>
318 std::optional<::aria::Error> error = std::nullopt) {
319 auto sink = detail::snapshot_global_sink_();
320 if (!sink || !*sink)
return;
322 std::chrono::steady_clock::now(), std::move(error)};
323 detail::dispatch_trace_(sink, event);
328template<detail::TracePayloadType Payload>
330 std::optional<::aria::Error> error = std::nullopt) {
351 : previous_(detail::swap_global_sink_(
356 detail::swap_global_sink_(std::move(previous_));
365 std::shared_ptr<TraceSink> previous_;
Encapsulated user action with an optional CanExecute predicate.
Definition command.hpp:58
ScopedTraceSink(TraceSink sink)
Definition diagnostics.hpp:350
ScopedTraceSink(ScopedTraceSink &&)=delete
ScopedTraceSink & operator=(const ScopedTraceSink &)=delete
~ScopedTraceSink() noexcept
Definition diagnostics.hpp:355
ScopedTraceSink & operator=(ScopedTraceSink &&)=delete
ScopedTraceSink(const ScopedTraceSink &)=delete
#define ARIA_ABI_API
Definition export.hpp:21
Definition diagnostics.hpp:95
ReactivePhase
Reactive flush phases.
Definition diagnostics.hpp:101
@ SkipClean
Definition diagnostics.hpp:105
@ RoundBegin
Definition diagnostics.hpp:103
@ FlushBegin
Definition diagnostics.hpp:102
@ Recomputed
Definition diagnostics.hpp:106
@ Pull
Definition diagnostics.hpp:104
@ RoundEnd
Definition diagnostics.hpp:107
@ FlushEnd
Definition diagnostics.hpp:108
void publish_trace_unchecked(const TraceEvent &event) noexcept
Publish an already-built event using one owning sink snapshot.
Definition diagnostics.hpp:293
void clear_trace_sink() noexcept
Tear down the global sink.
Definition diagnostics.hpp:279
void install_trace_sink(TraceSink sink)
Install (or replace) the global sink.
Definition diagnostics.hpp:271
void publish_trace(const TraceEvent &event) noexcept
Publish an already-built event.
Definition diagnostics.hpp:302
std::variant< trace::Reactive, trace::Async, trace::Binding, trace::Command, trace::Validation, trace::List > TracePayload
Heterogeneous payload. Order matches TraceCategory.
Definition diagnostics.hpp:183
std::function< void(const TraceEvent &)> TraceSink
User-facing sink shape: a callable that receives every published event.
Definition diagnostics.hpp:230
bool has_trace_sink() noexcept
True iff a sink is currently installed.
Definition diagnostics.hpp:286
TraceCategory
Coarse subsystem label.
Definition diagnostics.hpp:66
@ Validation
Validator / FormValidator rule runs.
Definition diagnostics.hpp:71
@ Async
AsyncCommand / AsyncResource lifecycle.
Definition diagnostics.hpp:68
@ List
ObservableList / FilteredList / SortedList / MappedList.
Definition diagnostics.hpp:72
@ Binding
BindingEngine VM<->View dispatch.
Definition diagnostics.hpp:69
@ Reactive
Graph flush, push-color, pull-evaluate.
Definition diagnostics.hpp:67
@ Command
Synchronous Command<Args...> execution.
Definition diagnostics.hpp:70
std::string_view to_string(TraceCategory c) noexcept
Definition diagnostics.hpp:75
Definition validation_key.hpp:110
One trace event.
Definition diagnostics.hpp:200
std::string_view category_name() const noexcept
Definition diagnostics.hpp:216
std::chrono::steady_clock::time_point time
Monotonic timestamp at publish time.
Definition diagnostics.hpp:208
TracePayload payload
Per-category payload.
Definition diagnostics.hpp:204
std::optional<::aria::Error > error
Optional Error snapshot (for *_fail / *_error events).
Definition diagnostics.hpp:214
TraceCategory category
Coarse routing label.
Definition diagnostics.hpp:202
(field_path, rule_id) locator for a validation message.
Definition validation_key.hpp:52
Async lifecycle.
Definition diagnostics.hpp:128
std::uint64_t generation
Optional invocation generation counter (AsyncResource gen, AsyncCommand inflight id).
Definition diagnostics.hpp:137
std::string source
Subsystem tag, e.g. "AsyncCommand" or "AsyncResource".
Definition diagnostics.hpp:130
std::string op
Operation, e.g.
Definition diagnostics.hpp:134
Binding events.
Definition diagnostics.hpp:142
std::string op
What happened.
Definition diagnostics.hpp:148
std::string platform
Adapter platform name ("qt6", "appkit", "uikit", "fake", ...).
Definition diagnostics.hpp:144
std::string target
Bind target description, free-form ("text", "bool", "int", ...).
Definition diagnostics.hpp:146
Synchronous Command<Args...> events.
Definition diagnostics.hpp:153
std::string op
Definition diagnostics.hpp:154
Observable-list mutation.
Definition diagnostics.hpp:173
std::size_t size_after
Definition diagnostics.hpp:177
std::string op
Definition diagnostics.hpp:174
std::size_t index
Definition diagnostics.hpp:175
std::size_t from_index
Move-only; 0 otherwise.
Definition diagnostics.hpp:176
Definition diagnostics.hpp:111
std::string node_name
Optional debug name of the node being processed (Pull / SkipClean / Recomputed).
Definition diagnostics.hpp:115
ReactivePhase phase
Definition diagnostics.hpp:112
int round
Round counter (1-based).
Definition diagnostics.hpp:118
bool changed
Only meaningful for Recomputed: did the cached value actually move (true) or did the upstream-version...
Definition diagnostics.hpp:122
Validation events.
Definition diagnostics.hpp:160
std::string op
Operation: "rule_pass" / "rule_fail" / "warning_pass" / "warning_fail" / "begin_pending" / "end_pendi...
Definition diagnostics.hpp:163
std::string message
Carried only for the *_fail variants; empty otherwise.
Definition diagnostics.hpp:166
ValidationKey key
Definition diagnostics.hpp:164