图库: 修 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:
1 parent
7036020005
commit
f647a3c498
5 files changed
+84
-16
No files matched your search
@@ -850,14 +850,23 @@ int main(void)
|
||||
size_t new_peak = peak_since(base);
|
||||
uint64_t ms_new = (uint64_t)meow_ui_time_ms() - t_new;
|
||||
|
||||
/* 前缀字节数**实测**(zip 层 mz_read_prefix 的写出长度),不是按 4KB 硬算:
|
||||
* 否则「前缀总字节 < 旧 1/4」只要页 >16KB 就恒真,抓不到前缀读变多。
|
||||
* 注意 deflate 条目的 inflate 窗口在 libz 内部(动态库,--wrap 看不到),
|
||||
* 所以下面 new_peak 是「本进程侧」的堆峰值,不是 zlib 窗口。 */
|
||||
unsigned char probe[4096];
|
||||
size_t probe_len = 0;
|
||||
int probe_rc = e0 ? mz_read_prefix((mz_archive *)zh.u.zip.arch, e0,
|
||||
probe, sizeof probe, &probe_len) : MZ_ERR_ARG;
|
||||
long long bytes_old = 500LL * (long long)(e0 ? e0->uncomp_size : 0);
|
||||
long long bytes_new = 500LL * 4096; /* 上限:每页最多读 4KB */
|
||||
long long bytes_new = 500LL * (long long)probe_len;
|
||||
INFO("CBZ 500 页[%s]:旧=整页解压 %lldkB/页·总%lldkB 峰值%zuKB 耗时%llums;"
|
||||
"新=前缀 %lldkB/页·总%lldkB 峰值%zuB 耗时%llums",
|
||||
"新=前缀 %lldB/页·总%lldkB 峰值%zuB 耗时%llums(zlib 窗口在库内、不计入峰值)",
|
||||
deflate ? "deflate" : "stored",
|
||||
e0 ? (long long)e0->uncomp_size / 1024 : 0LL, bytes_old / 1024,
|
||||
old_page_peak / 1024, (unsigned long long)ms_old,
|
||||
4LL, bytes_new / 1024, new_peak, (unsigned long long)ms_new);
|
||||
(long long)probe_len, bytes_new / 1024, new_peak,
|
||||
(unsigned long long)ms_new);
|
||||
CHECK(meta_ok, "[%s] 500 页 meta 全部探测成功", deflate ? "deflate" : "stored");
|
||||
CHECK(dim_ok, "[%s] 500 页尺寸都取到 96x96", deflate ? "deflate" : "stored");
|
||||
CHECK(new_peak <= 4096,
|
||||
@@ -866,8 +875,11 @@ int main(void)
|
||||
CHECK(old_page_peak >= 16 * 1024,
|
||||
"[%s] 对照:旧路径每页分配 ≥16KB(实测 %zuB)",
|
||||
deflate ? "deflate" : "stored", old_page_peak);
|
||||
CHECK(bytes_new < bytes_old / 4,
|
||||
"[%s] 前缀读总字节 < 旧路径 1/4(%lldkB vs %lldkB)",
|
||||
CHECK(probe_rc == MZ_OK && probe_len == 4096,
|
||||
"[%s] mz_read_prefix 实测只读 4KB(rc=%d, %zuB/页)",
|
||||
deflate ? "deflate" : "stored", probe_rc, probe_len);
|
||||
CHECK(bytes_new * 4 < bytes_old,
|
||||
"[%s] 前缀实测总字节 < 旧路径 1/4(%lldkB vs %lldkB)",
|
||||
deflate ? "deflate" : "stored", bytes_new / 1024, bytes_old / 1024);
|
||||
mr_book_close_auto(&zb, &zh);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in new issue
Block a user