#pragma once #include #include #include namespace cvmmap_streamer::metrics { struct LatencySummary { std::uint64_t samples{0}; std::uint64_t min_us{0}; std::uint64_t max_us{0}; std::uint64_t avg_us{0}; std::uint64_t p50_us{0}; std::uint64_t p95_us{0}; std::uint64_t p99_us{0}; }; class IngestEmitLatencyTracker { public: void note_ingest(); void note_emit(); void note_emit_stall(); [[nodiscard]] std::uint64_t emit_stall_events() const; [[nodiscard]] std::uint64_t pending_frames() const; [[nodiscard]] LatencySummary summarize() const; private: std::deque ingest_queue_ns_{}; std::vector samples_us_{}; std::uint64_t emit_stall_events_{0}; }; }