AskaEth
462cfd5bc0
图库: 阅读器翻页按显示尺寸解码(零重采样)+ 多页闪退防御 + 从第 N 张开始(M17)
用户反馈「横竖翻页都卡(40 页也卡)」「140 张图的文件夹一打开就闪退」
「要从中间某张开始看」三条,本次分别处理:
翻页卡顿(真因:每帧一次重采样)
- 解码目标从「屏长边」改成「当前 fit/zoom 的显示尺寸」:适宽 3:4 页原来解成
540x720、显示 480x640,draw_page_at 于是每帧走 meow_ui_img_scaled —— 每页每帧
多一遍全图最近邻重采样 + 一次 1.2MB 临时 malloc/free(>128KB 走 mmap)。
- 现在解码结果与显示框一致(±2px 容差)→ 翻页/滚动热路径只有原生 blit。
- fit/zoom 变化时按新几何重解(slot_ready 判据 + 同页替换),不再残留缩放;
已到解码预算或已是原始分辨率的小图不会反复重解。
- 拖动/吸附/fling 帧只 invalidate 内容区(顶栏静态,不再每帧重绘标题文字);
异步落位只在「该页真的在屏幕上」时才重绘,预取邻居不刷屏。
- 页原始尺寸按册缓存(8B/页),绘制几何不再每帧 fopen probe 文件。
多页闪退(宿主未能复现,按内存边界防御)
- 常驻页图改为「显示尺寸」并加上限:单页 ≤3MB、整窗 ≤9MB(超限淘汰最远页);
常驻内存只与解码窗大小有关,不随页数增长。
- 解码中间峰值 >12MB 的页直接跳过并显示占位 + WARN(旧代码 PNG/BMP 放到 40MB,
3000x3000 就是 36MB 瞬时分配;JPEG 完全没上限)。140 页夹具(含坏图/超大图)
走真实 UI 链路打开、翻页、跳页、条漫全部通过。
新增 mr_reader_open_dir_at(dir, start_index)(文件管理器模式入口)
- 显式下标优先于续读记录;-1=续读(旧入口语义),其它负数钳到 0,≥页数钳到末页。
- mr_reader_open_dir 保留为 (dir, MR_READER_START_RESUME) 的包装;reader.h 导出。
测试:新增 test_reader_perf(翻页零重采样/fit 切换/驻留上界)与
test_reader_many_pages(140 页 + 坏图/超大图 + 起始下标/钳制/续读优先级 + 条漫跳页)。
2026-11-05 18:06:26 +08:00
..
2026-11-05 12:13:47 +08:00
2026-11-05 11:39:34 +08:00
2026-11-05 11:58:12 +08:00
2026-11-05 18:06:26 +08:00
2026-11-05 11:58:12 +08:00
2026-11-05 11:39:34 +08:00
2026-11-04 21:25:17 +08:00
2026-11-04 21:25:17 +08:00
2026-11-05 12:23:31 +08:00
2026-11-05 12:23:31 +08:00
2026-11-05 12:23:31 +08:00
2026-11-05 13:03:20 +08:00
2026-11-05 12:23:31 +08:00
2026-11-05 12:23:31 +08:00
2026-11-04 21:49:33 +08:00
2026-11-05 12:23:31 +08:00
2026-11-04 21:49:33 +08:00
2026-11-04 21:49:33 +08:00
2026-11-05 13:03:20 +08:00
2026-11-04 21:25:17 +08:00
2026-11-04 20:58:05 +08:00
2026-11-05 18:06:26 +08:00
2026-11-05 18:06:26 +08:00
2026-11-04 21:25:17 +08:00
2026-11-04 21:25:17 +08:00
2026-11-04 21:49:33 +08:00
2026-11-05 11:39:34 +08:00