Skip to main content

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}