Skip to content

P3 TinyJank / Smooth 产品闭环阶段结果 ​

本批结论 ​

  1. TinyJank(/10min) 已按公开 SmallJank / 微卡顿规则实现,并与历史 SmallJank(/10min) 复用同一次判定,不重复计数。
  2. Smooth 已实现为 Perfowl 自有透明候选:相对中位 FrameTime 的归一化均方根偏差;公式可复算,但不宣称与 PerfDog 数值等价。
  3. Python、Swift、29 Stat、64 项 Registry、自校准、Foundation Delivery、工作台说明与站点已完成同批贯通。
  4. Registry 静态 Unsupported 从 2 项降为 0;输入不足或采集条件不满足时仍输出 missing,不补 0。
  5. iOS 17/18 已接受的 E4 CoreProfile 源可回放生成两个指标;由于现有窗口很短,只证明链路成立,不用于制定阈值或宣称外部一致性。

完整定义、采集源、公式和质量语义见 Frame Time 与流畅度权威页。

冻结算法 ​

设第 i 个有效呈现帧间隔为 FT[i],单位为 ms,前三个有效间隔均值为 B[i]。

TinyJank ​

text
B[i] = mean(FT[i-3], FT[i-2], FT[i-1])
TinyJank[i] = FT[i] > 2 * B[i] AND FT[i] > 1000 / 24 ms
TinyJank(/10min) = TinyJankCount / durationSeconds * 600
  • 公式版本:tiny-jank.perfdog-public.v1。
  • SmallJank 是兼容别名,与 TinyJank 同值。
  • 阈值按 1000/24 = 41.666666… ms 计算。
  • 前三段只建立动态基线;没有正测试时长时速率为 missing。

Smooth ​

text
M = median(FT)
e[i] = (FT[i] - M) / M
Smooth = 100 * sqrt(mean(e[i]^2))
  • 公式版本:perfowl-smooth.robust-rms.candidate.v1。
  • 越低越稳定;恒定 60 Hz 与 120 Hz 序列的合法结果均为 0。
  • 至少 4 个有效 FrameTime;短窗口输出 missing。
  • 长帧不裁剪,避免严重卡顿被隐藏。
  • 该公式是 Perfowl candidate;PerfDog 公开材料未给出 f(X,p,hp) 的完整参数,现阶段不套用竞品阈值。

实现范围 ​

层结果
Python FramePipeline新增精确 TinyJank 阈值、TinyJank 兼容投影与 Smooth 计算
Swift FramePipeline与 Python 使用同一公式、常量和短窗口门禁
29 StatTinyJank(/10min) 与 Smooth 从 Unsupported 改为显式值或 missing
Registry / 自校准两项均进入真实 64 项 Registry 与 frame report 校准链
DeliveryknownUnsupported=[],保留 Smooth 同窗数值与产品阈值校准门禁
工作台Frame Time 入口明确说明 Session 报告同时生成 TinyJank / Smooth
版本Foundation collector-foundation.2.0-beta;Mac App 1.0.0 (29);Frame Report candidate.v3

确定性验证 ​

场景TinyJankSmooth结果
稳定 60 Hz00合法稳定值
稳定 120 Hz00合法稳定值
单次微毛刺1大于 0TinyJank 命中且波动上升
短窗口0 次判定nullSmooth 正确 fail-closed
包内固定 Fixture175.13009550107067TinyJank 与 SmallJank /10min 完全一致

E4 既有真机源回放 ​

下表使用此前已接受的匿名 CoreProfile presented-frame E4 源进行离线回放;没有重新连接设备,也没有将短窗口扩大解释为长时体验结论。

样本有效 FrameTimeTinyJank CountSmooth解释
设备 A · iOS 1782501.319极短窗口,链路证据
设备 B · iOS 1834344.864短窗口,链路证据

匿名机器可读证据:下载 JSON。文件不包含设备标识、设备名、Bundle ID 或 PID。

最终回归与产物 ​

项目最终结果证据
Python冻结 CPython 3.12 环境 188/188E2
Swift83/83E2
Foundationcollector-foundation.2.0-beta x86_64;289 个清单文件;归档 SHA-256 3de39532…c07eE2
Mac App1.0.0 (29) x86_64;包内 pmd3 11.3.1 / Foundation 2.0-beta probe readyE2
签名ad-hoc codesign --verify --deep --strict 通过E2
Registry / Stat64 项 Registry;29 Stat;knownUnsupported=[]E2
真机来源iOS 17/18 既有 E4 CoreProfile 源可生成 TinyJank / SmoothE4 source replay

未关门门禁 ​

  1. Smooth 尚未进行 PerfDog 同一设备、同一场景、同一时间窗的数值校准,不能宣称数值等价。
  2. 现有真机回放窗口过短;需补前台静止、连续滚动、动画与重负载的长 Session,才能制定 Perfowl 自有分级阈值。
  3. Frame Time 仍是 foreground-device,尚未证明目标 PID 独占的逐帧归因。
  4. iOS 15、iOS 17.4–17.x 与更多机型兼容覆盖仍开放。

下一阶段工作与整体进度 ​

  • 下一阶段:优先完成 P3 长窗口校准与目标进程归因证据;如继续暂停竞品同窗,则先用可控 Fixture 建立 Smooth 稳定性分布和 TinyJank 长时一致性,再进入 P6 Time Profiler / Hitches 增强。
  • 整体进度:P0、P1 已完成;P2 Startup 官方链与 P3 TinyJank / Smooth 产品链已完成,P2 数值同窗、P3 长时/归因、P4 人工 UI、P5 物理放电与 ThermalStatus、P6 其余增强及 P7 云端仍为开放项。

Perfowl · Performance Observer