summaryrefslogtreecommitdiff
path: root/src/LivingVillage.Desktop/PerformanceSummary.fs
blob: 3edb4a70c1da7beba297fe6905f539cec4092153 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
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 }