namespace LivingVillage.Desktop /// P21:纯函数的帧率采样汇总(均值/最低/最高),供实机性能核对与回归测试。 /// 不含时钟/IO,只看传入的每秒 FPS 样本序列;warmup 采样用于剔除启动抖动。 module PerformanceSummary = type Summary = { Count: int Mean: float Min: float Max: float } /// 丢弃前 `warmupSamples` 个样本(不足则全丢),对剩余样本求均值/最低/最高。 /// 剩余为空时返回 None(如运行过短)。 let summarize (warmupSamples: int) (samples: float list) : Summary option = let skip = max 0 warmupSamples let taken = if List.length samples <= skip then [] else samples |> List.skip skip match taken with | [] -> None | _ -> Some { Count = taken.Length Mean = List.average taken Min = List.min taken Max = List.max taken }