perf(settings): coalesce refreshes and cache resize previews
This commit is contained in:
1 parent
6671960d5e
commit
81b99709bb
16 files changed
+906
-74
No files matched your search
@@ -1,8 +1,8 @@
|
||||
# Ferese Graphite 视觉方案
|
||||
|
||||
- 文档版本:1.4
|
||||
- 文档版本:1.5
|
||||
- 整理日期:2026-10-28
|
||||
- 视觉基线:`1e34ec4`、`9908dde`、`3264659`;本版补充主题预览原生绘制与配置选项的后台载入。
|
||||
- 视觉基线:`1e34ec4`、`9908dde`、`3264659`、`6671960`;本版补充全部设置分类与窗口缩放的性能检查。
|
||||
- 适用范围:Ferese 设置、Shell 共享控件、锁屏与原生 Rime 候选界面的主题协同。
|
||||
|
||||
## 1. 视觉目标
|
||||
@@ -245,6 +245,9 @@ Appearance 作为全部设置的入口,内容按实际功能分组:
|
||||
- 主题预览由原生矩形、圆角和线条绘制,保留浅深配对、当前外观指示和选中标记;布局阶段不再生成与窗口尺寸相关的 SVG。主题与快捷键列表继续按可见行挂载。
|
||||
- “全部配置”在首次进入或搜索时异步查询 schema,同一请求在完成前只执行一次。成功结果以不可变快照缓存;失败可重试;查询返回时使用最新配置并保留搜索内容。
|
||||
- 显示器、连接、托盘应用与壁纸继续使用各自的后台读取或缩略图任务。新增页面应先显示内容结构和载入状态,将耗时采集放到后台,避免在视图构建、布局或绘制回调里执行子进程和文件解析。
|
||||
- 显示器查询合并进行中请求,成功或失败返回后 1 秒内的自动访问复用结果,保留原有 2 秒轮询。托盘应用查询使用 2 秒短时缓存和 3 秒总超时;失败保留上次成功列表。手动刷新绕过缓存有效期,但不会叠加进行中请求。
|
||||
- 面板预览在配置解析时保留规范化数据,仅在面板字段编辑后更新,避免每帧重复反序列化。启动时的主题快照在初始化中复用;手动重新载入配置使用后台任务,结果不会覆盖请求之后的新编辑。
|
||||
- 窗口布局示意图使用缓存矢量几何,保留原有渐变、曲线、颜色、描边和比例;布局参数或主题改变时更新缓存。最大化与还原保持同一示意图尺寸时复用几何。
|
||||
- 设置控件保留稳定 ID,使异步数据刷新、可见行挂载和页面切换保持键盘焦点与未提交输入。
|
||||
|
||||
## 8. 动效原则
|
||||
@@ -299,7 +302,7 @@ status {
|
||||
|
||||
| 验证项 | 结果 |
|
||||
| --- | --- |
|
||||
| 设置测试 | 122 项通过,9 项可选检查默认跳过 |
|
||||
| 设置测试 | 128 项通过,10 项可选检查默认跳过 |
|
||||
| 滚动渲染专项 | 额外运行 1 项通过,覆盖 WGPU / tiny-skia 与两种主题配置 |
|
||||
| 配置测试 | 51 项单元测试及 11 项集成测试通过 |
|
||||
| 共享主题 / 面板 / Shell | 34 / 69 / 253 项通过 |
|
||||
@@ -316,7 +319,7 @@ status {
|
||||
| 原生主题预览 | 检查配对颜色、透明外角和选中标记图层顺序;保留比例与键盘导航 |
|
||||
| 后台 schema | 将查询人为延迟 2 秒,窗口提前显示载入状态;结果完成后显示选项,查询只执行一次;覆盖失败重试与最新配置接续 |
|
||||
|
||||
滚动渲染专项、边缘双击与窄窗口抽屉的记录沿用前版 `9908dde`。本版原生检查使用独立嵌套预览,保留原预览中的应用;没有重新执行关机、挂起或切换实际桌面会话。主机显示器、默认应用关联和 GNOME 输入源配置与开始时一致。
|
||||
滚动渲染专项记录沿用前版 `9908dde`;边缘双击与窄窗口抽屉本轮再次检查通过。本版原生检查使用独立嵌套预览,保留原预览中的应用;没有重新执行关机、挂起或切换实际桌面会话。主机显示器、默认应用关联和 GNOME 输入源配置与开始时一致。
|
||||
|
||||
### 性能采样
|
||||
|
||||
@@ -332,6 +335,27 @@ status {
|
||||
|
||||
性能、原生界面与后台载入记录位于 `.artifacts/settings-performance-20261028/`,与此前验收资料分开保存。另保留主题键盘选取、配置写入与恢复检查,以及配对颜色、透明外角和选中标记的像素回归。
|
||||
|
||||
#### 全部分类与最大化 / 还原
|
||||
|
||||
随后以 `6671960` 为基线,检查全部 18 个页面(包含动效、快捷键子页)。同一配置、WGPU、2 倍缩放,每页测量首次构建、稳定帧、10 次往返尺寸变化及 4 次切换,共 324 帧;尺寸为 1272 × 760 与 631 × 568 逻辑像素。连接、托盘和三屏数据使用固定模型,异步硬件查询另由请求合并测试和原生预览检查覆盖。
|
||||
|
||||
| 指标(中位数,调试构建) | 基线 | 优化后 |
|
||||
| --- | ---: | ---: |
|
||||
| 窗口页尺寸变化:绘制与 GPU 读回 | 28.52 ms | 8.35 ms |
|
||||
| 窗口页尺寸变化:构建、布局、绘制与读回总计 | 49.64 ms | 29.32 ms |
|
||||
| 面板页稳定帧:构建与布局 | 2.20 ms | 1.66 ms |
|
||||
| 面板页重复切换:构建与布局 | 2.15 ms | 1.47 ms |
|
||||
|
||||
其余分类重复切换的构建与布局中位数约 0.69–1.63 ms,没有发现同类 SVG 渲染尖峰。完整尺寸变化仍需重新排版文字,各页约 6–21 ms;首次进程的字体和渲染器初始化成本仍存在。这些读回指标用于实现对照,不代表物理屏幕的呈现延迟,也不表示每个页面都获得同等加速。
|
||||
|
||||
54 张相同尺寸的页面图像对照中,52 张逐像素一致;窗口页的两张宽窗口图仅有矢量替换差异,平均每通道误差约 0.071 / 255。独立示意图对照的平均每通道误差约 0.023 / 255,涵盖描边缩放和 SVG 渐变坐标的保持。请求合并、失败重试、预览缓存失效和后台重新载入期间的新输入保护均有回归检查。
|
||||
|
||||
独立嵌套会话中,18 页各切换两次,切换到首个重绘回调为 3.0–19.8 ms,两轮中位数分别为 7.9 / 7.4 ms。窗口页原生最大化 / 还原各测 12 次:新尺寸内容提交的中位数为基线 37.1 ms、优化后 35.2 ms,包含 IPC 轮询误差,未显示明显的原生提交延迟改善。视觉动画结束约 413 ms,保持原有动效;它与客户端绘制耗时分别记录,不以缩短动效替代渲染优化。
|
||||
|
||||
手动重新载入另用隔离配置和仅测试进程使用的读取拦截器人为延迟 2 秒:基线的读取线程就是界面主线程,新版的读取发生在工作线程。约 0.88 秒时,新版已经切换并显示主题页,基线仍等待读取。两版测试实例随后关闭,拦截器不用于保留的开发预览。预览运行程序的 SHA-256 与本次构建一致,检查前后配置的 SHA-256 一致。
|
||||
|
||||
本轮记录位于 `.artifacts/settings-audit-20261028/`,包含逐帧数据、前后图像、原生分类与窗口尺寸检查;这些资料只保留在本机。
|
||||
|
||||
### 实现位置
|
||||
|
||||
| 内容 | 文件 |
|
||||
@@ -346,6 +370,10 @@ status {
|
||||
| 日历日期和星期显示 | `crates/ferese-theme/src/calendar.rs` |
|
||||
| 原生主题预览绘制 | `crates/ferese-theme/src/gallery/preview.rs` |
|
||||
| 按需 schema 载入与缓存 | `shell/ferese-settings/src/all_options.rs` |
|
||||
| 数据刷新合并与有效期 | `shell/ferese-settings/src/refresh.rs` |
|
||||
| 规范化面板预览缓存 | `shell/ferese-settings/src/store.rs` |
|
||||
| 窗口示意图缓存绘制 | `shell/ferese-settings/src/window_preview.rs` |
|
||||
| 全部分类与尺寸性能采样 | `shell/ferese-settings/src/performance_tests.rs` |
|
||||
| 祝日函数执行与校验 | `crates/ferese-config/src/calendar_rules.rs` |
|
||||
| 时间弹层与控制中心 | `shell/ferese-shell/src/status_ui/` |
|
||||
| 活动窗口与焦点切换 | `shell/ferese-shell/src/window_tray.rs` |
|
||||
|
||||
Reference in new issue
Block a user