Avoid cold theme preview rasterization and load settings schema asynchronously

This commit is contained in:
aria committed 2026-10-28 06:28:06 +09:00
1 parent 326465952a
commit 6671960d5e
6 files changed
+514 -35

No files matched your search

+29 -4
View File
@@ -1,8 +1,8 @@
# Ferese Graphite 视觉方案
- 文档版本:1.3
- 文档版本:1.4
- 整理日期:2026-10-28
- 视觉基线:`1e34ec4`、`9908dde`;本版补充导航滚动、本地化、时间控制面板、活动窗口与可编辑祝日函数。
- 视觉基线:`1e34ec4`、`9908dde`、`3264659`;本版补充主题预览原生绘制与配置选项的后台载入。
- 适用范围:Ferese 设置、Shell 共享控件、锁屏与原生 Rime 候选界面的主题协同。
## 1. 视觉目标
@@ -240,6 +240,13 @@ Appearance 作为全部设置的入口,内容按实际功能分组:
来源:[内阁府祝日资料](https://www8.cao.go.jp/chosei/shukujitsu/gaiyou.html)、[国立天文台春秋分日说明](https://www.nao.ac.jp/faq/a0301.html)、[Rhai 运算限制](https://rhai.rs/book/safety/max-operations.html)。官方快照作为回归校验资料,日历运行时使用可编辑函数。
### 7.7 内容载入与绘制
- 主题预览由原生矩形、圆角和线条绘制,保留浅深配对、当前外观指示和选中标记;布局阶段不再生成与窗口尺寸相关的 SVG。主题与快捷键列表继续按可见行挂载。
- “全部配置”在首次进入或搜索时异步查询 schema,同一请求在完成前只执行一次。成功结果以不可变快照缓存;失败可重试;查询返回时使用最新配置并保留搜索内容。
- 显示器、连接、托盘应用与壁纸继续使用各自的后台读取或缩略图任务。新增页面应先显示内容结构和载入状态,将耗时采集放到后台,避免在视图构建、布局或绘制回调里执行子进程和文件解析。
- 设置控件保留稳定 ID,使异步数据刷新、可见行挂载和页面切换保持键盘焦点与未提交输入。
## 8. 动效原则
保留现有动画与“减少动画”配置。动效服务于状态变化与空间关系,悬停和按下反馈保持简洁。
@@ -292,10 +299,10 @@ status {
| 验证项 | 结果 |
| --- | --- |
| 设置测试 | 120 项通过,9 项可选检查默认跳过 |
| 设置测试 | 122 项通过,9 项可选检查默认跳过 |
| 滚动渲染专项 | 额外运行 1 项通过,覆盖 WGPU / tiny-skia 与两种主题配置 |
| 配置测试 | 51 项单元测试及 11 项集成测试通过 |
| 共享主题 / 面板 / Shell | 33 / 69 / 253 项通过 |
| 共享主题 / 面板 / Shell | 34 / 69 / 253 项通过 |
| 布局检查 | 覆盖 480–1800 px 窗口宽度 |
| 原生预览 | 已检查深浅外观及 631 px 窄窗口 |
| 导航居中 | 全部 16 项;包含独立滚动条通道检查 |
@@ -306,9 +313,25 @@ status {
| 活动窗口区 | 位于右侧托盘左边;三个窗口点击、相邻图标切换、跨工作区激活、关闭移除与重新打开均通过 |
| 祝日函数 | 原生编辑并应用函数可改变日历;无限循环被拒绝且保存配置不变,恢复内置函数后配置校验通过 |
| 通知标记 | 独立预览中创建并移除测试通知,检查白色与透明状态,点击区域宽度保持不变 |
| 原生主题预览 | 检查配对颜色、透明外角和选中标记图层顺序;保留比例与键盘导航 |
| 后台 schema | 将查询人为延迟 2 秒,窗口提前显示载入状态;结果完成后显示选项,查询只执行一次;覆盖失败重试与最新配置接续 |
滚动渲染专项、边缘双击与窄窗口抽屉的记录沿用前版 `9908dde`。本版原生检查使用独立嵌套预览,保留原预览中的应用;没有重新执行关机、挂起或切换实际桌面会话。主机显示器、默认应用关联和 GNOME 输入源配置与开始时一致。
### 性能采样
2026-10-28 在本机同一隔离嵌套会话对比 `3264659` 与本次修订,均为调试构建。原生设置窗口为 1272 × 760 逻辑像素、2 倍缩放;每个程序首次进入主题页一次,再切换三次。原生指标为页面切换至首个重绘回调的时间,不等同于显示器扫描呈现延迟。
| 指标 | 原实现 | 优化后 |
| --- | ---: | ---: |
| 原生主题页首次重绘 | 243.3 ms | 15.1 ms |
| 原生主题页后续切换中位数 | 14.0 ms | 10.8 ms |
| WGPU 主题滚动绘制与读回 P95 | 163.9 ms | 3.75 ms |
滚动采样使用相同的 1000 × 780 逻辑视口、1.25 倍缩放及 48 帧往返滚动,跳过最初 8 帧。软件回退的主题绘制 P95 仍约 304 ms,本轮未进一步调整其共有绘制成本。把 schema 查询人为延迟 2 秒时,约 765 ms 已显示载入界面,随后补齐选项;请求仅执行一次。
性能、原生界面与后台载入记录位于 `.artifacts/settings-performance-20261028/`,与此前验收资料分开保存。另保留主题键盘选取、配置写入与恢复检查,以及配对颜色、透明外角和选中标记的像素回归。
### 实现位置
| 内容 | 文件 |
@@ -321,6 +344,8 @@ status {
| 行内说明与标题字重 | `shell/ferese-settings/src/form_controls.rs` |
| 日历设置与代码编辑器 | `shell/ferese-settings/src/calendar_controls.rs` |
| 日历日期和星期显示 | `crates/ferese-theme/src/calendar.rs` |
| 原生主题预览绘制 | `crates/ferese-theme/src/gallery/preview.rs` |
| 按需 schema 载入与缓存 | `shell/ferese-settings/src/all_options.rs` |
| 祝日函数执行与校验 | `crates/ferese-config/src/calendar_rules.rs` |
| 时间弹层与控制中心 | `shell/ferese-shell/src/status_ui/` |
| 活动窗口与焦点切换 | `shell/ferese-shell/src/window_tray.rs` |