katra_trace/record.rs
1//! Trace records.
2
3use katra_core::TraceEvent;
4use serde::{Deserialize, Serialize};
5
6/// One record in a trace stream.
7#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
8pub enum TraceRecord {
9 /// A captured event.
10 Event(TraceEvent),
11 /// An epoch boundary (loading, frame N, scene change, ...). Epochs
12 /// segment the trace for per-epoch critical-path analysis.
13 EpochMarker {
14 /// Epoch label.
15 label: String,
16 /// Monotonic ns (relative to profiler start).
17 ts_mono_ns: u64,
18 /// Wall-clock ns.
19 ts_wall_ns: u64,
20 },
21 /// A named counter value at a point in time (bytes copied, queue depth).
22 Counter {
23 /// Counter name.
24 name: String,
25 /// Counter value.
26 value: u64,
27 /// Monotonic ns.
28 ts_mono_ns: u64,
29 },
30 /// End-of-session summary written by the profiler on finish.
31 SessionSummary(TraceSummary),
32}
33
34/// Session summary written at trace end.
35#[derive(Clone, Debug, Default, PartialEq, Serialize, Deserialize)]
36pub struct TraceSummary {
37 /// Total events captured.
38 pub event_count: u64,
39 /// Session duration in ns.
40 pub duration_ns: u64,
41 /// Span pairs completed.
42 pub span_count: u64,
43 /// Distinct requests correlated.
44 pub request_count: u64,
45 /// Counter records emitted.
46 pub counter_events: u64,
47 /// Capture overhead measured during the session (ns).
48 pub overhead_ns: u64,
49 /// Events dropped due to buffer overflow or post-finish emission.
50 pub dropped: u64,
51}