namespace SHH.CameraSdk; /// /// 帧全链路追踪上下文 /// 功能:记录单帧数据从产生到结束的完整生命周期信息,包含标识、决策结果、性能指标与日志流水 /// 用途:用于问题排查、性能分析、帧流转追溯,支撑全链路可观测性 /// public class FrameContext { #region --- 帧核心标识 (Frame Core Identification) --- /// 物理帧序号(全局唯一,关联帧的原始数据标识) public long FrameSequence { get; set; } /// 帧上下文创建时间戳(默认当前时间,记录帧进入追踪链路的时刻) public DateTime Timestamp { get; set; } = DateTime.Now; #endregion #region --- 帧决策结果 (Frame Decision Results) --- /// 帧是否被保留(true=保留并分发,false=被丢弃) public bool IsCaptured { get; set; } /// 帧丢弃原因(仅 IsCaptured 为 false 时有效,默认空字符串) /// 示例值:"NoSubscribers"(无订阅者)、"PipelineFull"(处理管道满)、"FpsLimit"(帧率限制) public string DropReason { get; set; } = string.Empty; /// 帧分发目标应用ID列表(记录该帧最终分发给的所有订阅者标识,合并结果) /// 示例值:["WPF_Display_Main", "AI_Behavior_Engine"] public List TargetAppIds { get; set; } = new(); #endregion #region --- 帧性能指标 (Frame Performance Metrics) --- /// 颜色转码耗时(单位:毫秒) /// 记录帧数据格式转换(如 YUV→BGR)的耗时,用于性能瓶颈定位 public double CvtColorCostMs { get; set; } /// 二次处理耗时(单位:毫秒) /// 记录帧在处理管道中的额外加工耗时(如打水印、裁剪、AI预处理等) public double ProcessCostMs { get; set; } /// 帧总处理耗时(单位:毫秒) /// 记录帧从进入追踪链路到处理完成/丢弃的总耗时,为性能优化提供数据支撑 public double TotalCostMs { get; set; } #endregion #region --- 帧日志流水 (Frame Logs) --- /// 帧生命周期日志流水(按时间顺序记录关键节点操作) public List Logs { get; } = new(); /// 新增帧日志(自动添加时间戳,格式:[HH:mm:ss.fff] 日志内容) /// 日志内容(记录帧流转的关键节点,如“驱动提交帧数据”“管道处理完成”) public void AddLog(string msg) => Logs.Add($"[{DateTime.Now:HH:mm:ss.fff}] {msg}"); #endregion }