图库: 修条漫长页/竖翻每帧重采样(解码几何对齐排版)+ 判据与活锁(M17 评审 P1-1/P2)
评审用真实 UI 链路实测:600x960、800x1280(长宽比 1.6)在翻页拖动与条漫模式 都是 blit+0 / scaled+5;「先适高再切条漫」scaled+10。根因是解码几何来源与排版几何 不同源:decode_long_side() 把长边钳到屏长边 720(600x960 解成 450x720),而 strip_page_height() 按屏宽算出 480x768;mode_set() 又不动 g_fit,适高/原始进条漫 100% 重采样。 修复: - 解码目标 = 排版真正要的显示框:新增 page_geometry_at()(条漫=strip 高度、宽=视口宽; 翻页=fit/zoom),解码计划与绘页/就绪判据同源。 - plan_decode_long() 去掉屏长边钳制,只保留 MR_PAGE_BYTES_CAP(3MB) 硬上界, 超长条漫按比例收缩(不再因为「高度 > 屏长边」就永远对不上)。 - slot 记录本次解码的 want 几何;slot_ready() 改为几何比较: fit/缩放/模式变化 → 重解一次(放大再缩回、适高→条漫回到纯 blit); 被 3MB 钳住的解码 want 不变 → 不再反复重解(大屏活锁)。 - 解码几何随 page_req 下发、随 page_res 返回:worker 不再读 g_fit/g_zoom/g_vw/g_vh。 - 峰值估算把 downscale/缩解输出一并计入(P2-3)。 - 适宽长图(竖向单独溢出)不再算平移模式:1.6 比例页原先左右 tap/横拖会变成 「水平平移 0px」的空操作,页面根本翻不动;现在仍按翻页处理(原始档/横向溢出不变)。 - 窗口不再主动清窗口外的页图:0→1→0 来回翻不再反复重解同一页(140 页测试 decode 次数 21→14);容量仍由 MR_SLOTS + 字节淘汰兜底。 - state_reset 复位 g_meta/g_start_at(起始页在 on_enter 入口先取走),删重复注释。 测试:test_reader_perf 夹具改成 600x960(1.6)并补 800x1280、翻页拖动、条漫、 「适高→条漫」、双击放大缩回、静止无重解、大屏 1080x1920 无活锁;test_reader_many_pages 补 meow_ui_paint_full(绘制路径覆盖,P2-5)。
This commit is contained in:
1 parent
462cfd5bc0
commit
ceb65dfd01
4 files changed
+379
-101
No files matched your search
@@ -208,6 +208,10 @@ int main(void)
|
||||
mr_reader_ui_count(), BOOK_PAGES);
|
||||
CHECK(mr_reader_ui_page() == 0, "start at page 0 (got %d)", mr_reader_ui_page());
|
||||
pump_ms(600);
|
||||
int draws0 = mr_reader_ui_blit_draws() + mr_reader_ui_scaled_draws();
|
||||
meow_ui_paint_full();
|
||||
CHECK(mr_reader_ui_blit_draws() + mr_reader_ui_scaled_draws() > draws0,
|
||||
"draw path executed (paged, 140p book)");
|
||||
|
||||
/* ---- M2 从第 N 张开始 / 越界钳制 ---- */
|
||||
meow_view_page_pop();
|
||||
@@ -246,8 +250,11 @@ int main(void)
|
||||
int before = mr_reader_ui_page();
|
||||
tap(40, 300);
|
||||
pump_ms(260);
|
||||
meow_ui_paint_full(); /* 绘制路径覆盖(P2-5) */
|
||||
if (mr_reader_ui_page() == before) ok_move = 0;
|
||||
}
|
||||
CHECK(mr_reader_ui_blit_draws() + mr_reader_ui_scaled_draws() > draws0,
|
||||
"draw path executed across flips");
|
||||
CHECK(ok_move, "12 consecutive flips advanced the page");
|
||||
CHECK(mr_reader_ui_resident_kb() <= 9 * 1024, "resident bounded on 140p book (%ldKB)",
|
||||
mr_reader_ui_resident_kb());
|
||||
@@ -285,6 +292,13 @@ int main(void)
|
||||
reader_on_tap(sx + sw, slider_y);
|
||||
pump_ms(900);
|
||||
CHECK(mr_reader_ui_jump_pending() == 0, "jump landed in webtoon");
|
||||
{
|
||||
int d0 = mr_reader_ui_blit_draws() + mr_reader_ui_scaled_draws();
|
||||
meow_ui_paint_full();
|
||||
meow_ui_paint_full(); /* 条漫绘制路径覆盖(P2-5) */
|
||||
CHECK(mr_reader_ui_blit_draws() + mr_reader_ui_scaled_draws() > d0,
|
||||
"draw path executed (webtoon)");
|
||||
}
|
||||
CHECK(mr_reader_ui_page() >= BOOK_PAGES - 3, "jumped near last page (got %d)",
|
||||
mr_reader_ui_page());
|
||||
CHECK(mr_reader_ui_resident_kb() <= 9 * 1024, "resident bounded in webtoon (%ldKB)",
|
||||
|
||||
Reference in new issue
Block a user