性能基线与测量
基线
测试环境:i5-13500HX(20 个逻辑处理器)、96 GB 内存,Windows 构建 26300、WebView2 155,约 700–800 个进程;普通权限的发布构建,窗口宽 1240 像素、100% 缩放,屏幕 165 Hz,前台采样间隔 1 秒、后台 5 秒。实际刷新率约 164.9–165.1 Hz。
| 页面与状态 | 绘制帧率 | 渲染主线程 CPU 时间 |
|---|---|---|
| 进程页,流畅模式 | 约 164–165 帧/秒 | 约 27 ms/s |
| CPU 总览,流畅模式 | 约 165 帧/秒 | 约 11 ms/s |
| CPU 总览,悬停曲线 | 约 165 帧/秒 | 约 30 ms/s |
| 20 个逻辑处理器,流畅模式 | 约 165 帧/秒 | 约 14 ms/s |
| 20 个逻辑处理器,均衡模式 | 约 83 帧/秒 | 约 16 ms/s |
| 服务、启动与连接页,静止 | 约 1 帧/秒 | 约 5–7 ms/s |
| 窗口最小化或隐藏 | 0 帧/秒 | 随后台采样与垃圾回收变化 |
主线程时间不包含 Rust 采集、GPU 进程和渲染合成线程。流畅模式下,CPU 总览与逻辑处理器视图的 GPU 进程和合成线程合计约 1.1–1.3 ms CPU 时间/帧。静态页面按需绘制,低帧数不表示卡顿。
服务、启动与连接页刷新时保留未变化的单元格节点;窗口隐藏后,额外的页面查询为 0,恢复显示时立即刷新。进程分组和排序仅在进程页计算,采样与历史记录仍按原有节拍运行。
进程表的滚动区域独立合成。相同实例中,按 PID 排序并冻结数据、沿 8000 像素范围往返滚动,约 137–143 帧/秒提升至 164–165 帧/秒,主线程每帧约 6.6–6.8 ms 降至 4.4–4.7 ms;流畅模式静止时的合成开销保持在测量波动范围内。窗口化、窄窗口与最大化时的布局和裁剪保持一致。
一次完整采样的中位数约 21 ms,p95 约 29 ms;其中进程采集约 9.5 ms、硬件采集约 6.2 ms、每进程 GPU 查询约 1.5 ms。快照 JSON 约 410 KiB,序列化中位数约 0.5 ms。
未录制跟踪时,进程页关闭曲线动画后的稳定私有提交量约 336 MiB,工作集约 543 MiB,均包含 Argus 与其 WebView2 进程。进程工作集相加会重复计算共享页。表格节点复用减少临时分配,整体常驻内存未确认显著下降。
刚启动的前 20 秒左右,WebView2 首次渲染与图标解码的开销较高。跟踪录制也会增加临时缓冲区,因此内存基线单独采集;强制垃圾回收仅用于存活诊断,不作为常驻占用指标。反复切换页面后的短期峰值会回落,不能据此判断泄漏。
历史存储的既有基线:每次写入约 30 µs(每 5 秒写一帧,约 450 字节,连续运行一天约 8 MB);查询 24 小时约 7 ms,7 天(约 40 MB 记录)约 22 ms(含 IPC,在后台线程执行);指针在历史曲线上移动时每次约 0.2 ms 脚本。
曲线动画各档的帧率与合成开销见曲线动画。
测量方法
-
用发布构建测量,启动后等约 25 秒再开始。
-
机器上有其他负载时,直接测 CPU 占用波动极大,同一配置可以在 22%–82% 之间摆动,不能作为依据。改用 Chromium 跟踪:统计帧数和重绘次数,并累加 GPU 进程与渲染进程合成线程的耗时。耗时取顶层任务的线程 CPU 时间(跟踪事件的
tdur),不取墙钟时间:GPU 进程的GpuVSyncThread在等待垂直同步,墙钟时间约等于跟踪时长(一段 10 秒的跟踪中约 10 秒,线程 CPU 时间不到 0.1 秒),按墙钟累加会掩盖其余线程的差别。 -
WebView2 在窗口被完全挡住或隐藏时停止渲染。需要在窗口不可见时测量,用下面的环境变量启动发布构建,再通过 DevTools 协议(CDP)录制跟踪;开始前先确认
requestAnimationFrame在运行:set WEBVIEW2_ADDITIONAL_BROWSER_ARGUMENTS=--remote-debugging-port=9341 --disable-features=CalculateNativeWinOcclusion target\release\argus.exe测完关掉这个实例:开着的调试端口可以驱动应用里的命令。
-
连着 CDP 时页面的
visibilityState照常跟随窗口:窗口隐藏或最小化时为hidden,不再渲染帧。 -
同一指标前后两次可能相差约 2%,机器上有其他负载时同一构建相邻两轮可相差 7% 以上。对比两种配置时交替测量,几轮的差异方向一致才下结论。
-
一段 10 秒的跟踪有时只录到 8–9 秒的帧,比较合成耗时要按帧数折算。进程页的 Paint 次数取决于这段时间里数值变化的进程行(每行单独重绘),随进程活动变化,不能直接比较。
-
改动画、样式或图表时,用相邻两帧的逐像素比较确认重画只差整体平移(见曲线动画)。