图库: 修 M32 评审 P1(plan_decode_long 仍按 4B/px)+ 补 480×853 回归(r2)

- P1:plan_decode_long 的判据从 l*s*4 改成 l*s*2(MR_PAGE_BYTES_CAP 已是 565 口径)。
  改前真机 480×853 页被压到 359×639(448KB)且每帧重采样;改后原尺寸落槽 799KB、
  绘制走原生 blit(scaled 增量 0)。
- 测试:新增 perf P13 —— 480×853 单页册,断言 slot_kb==480*853*2/1024、resident 相等、
  draw 后 blit 增长且 scaled 增量为 0;现有夹具(480×640/600×960)都在阈值以下,抓不到。
- P2:decode 日志 ok/fail 也打 peak+convert(与 skip 同口径);CBZ 500 页的「前缀字节」
  改成 mz_read_prefix 实测(不再用 500×4096 硬算),并说明 zlib 窗口不计入 --wrap 峰值;
  565 页图 alpha 忽略的行为差异写进 meow_ui_draw.h / gfx 注释;MR_ZOOM_TEMP_CAP 注释更正。
This commit is contained in:
AskaEth committed 2026-11-06 19:01:16 +08:00
1 parent 7036020005
commit f647a3c498
5 files changed
+84 -16

No files matched your search

+41
View File
@@ -20,6 +20,8 @@
* a) 565 blit 与 RGBA blit 在 565 屏上**逐像素一致**(同一套量化 → 不引入色偏);
* b) 565 量化误差在理论上界内(R/B ≤7、G ≤3),并给出 RMSE 与代表性采样;
* c) 8bit 灰阶梯/肤色渐变单调、无新增色带(与 RGBA 路径的阶梯数完全相同)。
* P13(M32 评审 P1):真机主力几何 480×853 —— 单页按 565 原尺寸落槽(~800KB)、
* 绘制走原生 blit、零重采样(plan_decode_long 曾仍按 4B/px 把它压到 359×639)。
*
* 编译:test/run_tests.sh(与 test_open_book_host 同口径;只发布 meow_ui.a 时 SKIP)。
*/
@@ -499,6 +501,45 @@ int main(void)
/* ---- P12(M32):565 页槽的颜色正确性(需要 565 屏的 back_buf)---- */
color_check();
/* ---- P13(M32 评审 P1):真机主力几何 480×853 —— 565 下必须**原尺寸落槽 + 单次 blit** ----
* 回归点:plan_decode_long 曾仍按 4B/px 判单页上限,把 480×853 压到 359×639(448KB),
* 于是每一帧都走 meow_gfx_blit_rgb565_scaled(重采样)。断言同时看字节与绘制路径,
* 光校验常量(page_px_cap()==786432)抓不到这个执行侧回归。 */
{
char book4[MR_PATH_MAX], p4[MR_PATH_MAX];
snprintf(book4, sizeof book4, "./mr_perf_books_%ld/v4", (long)getpid());
snprintf(p4, sizeof p4, "%s/t853.bmp", book4);
int ok4 = mkdir_p(book4) == 0 && write_bmp24(p4, 480, 853, 11) == 0;
if (!ok4) {
printf(" SKIP: 480x853 fixture write failed\n");
} else {
meow_view_page_pop(); /* 关掉 600×960 那册 */
mr_reader_open_dir(book4);
pump_ms(900);
draw_once();
int p13 = mr_reader_ui_page();
long slot = mr_reader_ui_slot_kb(p13);
/* 480×853 = 409,440px × 2B = 818,880B = 799.6KB(截断 799;真机口径 ~800KB)。
* 按 4B/px 误算时会被压到 359×639 = 448KB。 */
printf(" info: 480x853 resident=%ldKB slot=%ldKB blit=%d scaled=%d\n",
mr_reader_ui_resident_kb(), slot,
mr_reader_ui_blit_draws(), mr_reader_ui_scaled_draws());
CHECK(mr_reader_ui_count() == 1, "480x853 单页册 count=%d", mr_reader_ui_count());
CHECK(slot == 480 * 853 * 2 / 1024,
"480×853 按 565 原尺寸落槽:%ldKB(约 800KB;误按 4B/px 时只有 448KB)", slot);
CHECK(mr_reader_ui_resident_kb() == slot,
"单页册常驻 = 槽内字节(%ldKB)", mr_reader_ui_resident_kb());
int bl13 = mr_reader_ui_blit_draws(), sc13 = mr_reader_ui_scaled_draws();
draw_once();
CHECK(mr_reader_ui_blit_draws() > bl13,
"480×853 页绘制走原生 565 blit(+%d)",
mr_reader_ui_blit_draws() - bl13);
CHECK(mr_reader_ui_scaled_draws() == sc13,
"480×853 页零重采样(scaled 增量 %d)",
mr_reader_ui_scaled_draws() - sc13);
}
}
/* ---- P9 800x1280(评审表格另一档):翻页 + 条漫都必须零重采样 ---- */
meow_view_page_pop();
mr_reader_open_dir(book2);