3.9 KiB
FAIL
crates/ely-lok/src/worker.rs:286 — [P1] 上轮局部失效缺陷仍存在:编辑键继续调用 events::bump,在 events.rs:127 无条件设置 all=true,精确矩形仍会被整区失效覆盖,违反 LOK-03。固定补丁引擎实测:两段正文开头按 Return,批次为 (generation=1, all=true, rects=[]);远处 (0,7680,3840,3840) 图块编辑前后逐字节相同,LokView::apply_batch 仍清空全部缓存。纯点击及方向键已保持代际稳定,局部编辑的验收仍失败。修复方向:接通可靠的内容脏区来源,以相交矩形驱动重绘,并验证局部编辑保留未受影响的缓存图块。
crates/ely-lok/src/worker.rs:299 — [P1] 新增 POST_UNO 路径执行内容变更后没有产生失效或推进修订;当前固定 macOS 后端也没有图块失效回调。实测先编辑到 generation 1,再依次发送 .uno:SelectAll、.uno:Delete,重新绘制的像素已经改变,响应仍为 generation 1,事件批次为 (1,false,[])。LokView::watch 因代际相同直接继续等待,缓存中的旧正文会一直显示,违反 LOK-03。修复方向:将 UNO 内容变更纳入可靠的修订与脏区通知链,补充删除、撤销等命令执行后视图刷新的回归测试。
crates/ely-lok/src/view.rs:266 — [P1] Geom::px_of 已乘 DPI,prepare 又把其结果作为 GPUI Pixels 布局与绘制尺寸;GPUI 在 paint_image 内继续按窗口比例转换到设备像素,造成重复缩放。临时 GPUI 测试实测:zoom=1、DPI=2 时,3840 twips 图块生成 512 像素纹理,却绘制为 512 个逻辑像素;正确逻辑宽度应为 256。此时 doc_point(256,0) 返回 (1920,0),正确文档位置应为 (3840,0)。因此跨 1x/2x 显示器会改变页面逻辑尺寸、可见范围及滚动距离,违反 LOK-04;现有几何测试仅验证公式往返,未覆盖 GPUI 单位。修复方向:用 zoom 转换文档与 GPUI 逻辑坐标,仅在纹理分辨率转换中应用 DPI,并验证实际绘制尺寸、命中位置及滚动转换。
crates/ely-lok/src/view.rs:204 — [P1] 图块送入 RenderImage 前交换红蓝通道,导致文档颜色错误。锁定版本的 GPUI RenderImage 要求 BGRA,new 原样保存帧字节;当前 LOK 同样返回 BGRA。固定引擎绘制红色正文实测得到 1182 个红色像素,样本为 [0,0,255,255];将该像素通过实际 finish_tile 后,RenderImage::as_bytes(0) 变成 [255,0,0,255],GPUI 会显示蓝色。现有黑白图块测试无法捕获此错误。修复方向:按 GPUI 的 BGRA 契约传递图块,添加红蓝可区分的渲染回归断言。
crates/ely-lok/src/view.rs:155 — [P1] 文档尺寸只在构造时读取,失效处理仅更新代际与缓存;滚动上限、图块请求范围和页面裁剪持续使用旧 doc_size。固定引擎实测:初始文档为 (12808,16408) twips,输入 80 次 Return 后内核尺寸增至 (12808,32532);调用实际 apply_batch 后,视图尺寸仍为 (12808,16408)。新页面被第 282 行的范围检查及页面 mask 排除,滚动也无法到达新增内容,违反 LOK-04。修复方向:在文档尺寸变化时同步视图尺寸与滚动边界,覆盖增页、删页后的可见范围和裁剪。
crates/ely-lok/src/view.rs:139 — [P2] 事件任务被 detach,只有代际变化后才检查弱视图句柄;空闲批次始终走 continue。释放空闲 LokView 后,该任务仍每 50 毫秒轮询并强引用 worker,阻止其释放。临时 GPUI 测试已确认视图弱句柄失效,继续执行 20 个调度步骤后 worker 弱引用仍可升级;显式关闭文档使轮询返回错误后,任务才结束。关闭视图会留下持续工作的事件任务和引擎资源。修复方向:让订阅任务随视图释放而取消,或在每次等待前检查视图存活状态;补充空闲状态关闭视图后的任务与 worker 释放测试。