图库: 修 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
+17
-8
@@ -76,7 +76,10 @@
|
||||
#define MR_TICK_MS 16
|
||||
#define MR_PAINT_MS 16 /* 跟手拖动重绘节流(≈60fps 上限) */
|
||||
#define MR_DRAG_SLOP 8 /* 小于此位移算点击 */
|
||||
#define MR_ZOOM_TEMP_CAP (6 * 1024 * 1024) /* 缩放临时缓冲软上限(>此值降倍率,保内存) */
|
||||
/* 缩放倍率软上限(M32:绘制已改 meow_gfx_blit_rgb565_scaled,原地采样不再 malloc 目标尺寸
|
||||
* 临时图;这里保留原保守系数——按 4B/px 估「放大后解码目标」的峰值,比 565 口径更严,
|
||||
* 行为不回退。>此值逐档降倍率,保内存。 */
|
||||
#define MR_ZOOM_TEMP_CAP (6 * 1024 * 1024)
|
||||
#define MR_BOOK_PULL 110 /* 条漫到顶/底后再拉这么远,松手进相邻册 */
|
||||
#define MR_JUMP_TIMEOUT_MS 2500 /* 目标页迟迟解不出来 → 降级落位并提示 */
|
||||
#define MR_CONT_SAVE_MS 1000 /* 续读状态落盘节流 */
|
||||
@@ -460,8 +463,10 @@ static void log_mem(const char *tag)
|
||||
/* 页源解码回调(注入 logic 层的 mr_book 契约;可在后台线程调用) */
|
||||
/* ============================================================ */
|
||||
/* 由显示框(want_w×want_h)反推解码长边:默认就解到显示框大小(解码后可直接 blit),
|
||||
* 只有单页缓存字节上限(MR_PAGE_BYTES_CAP)是硬上界——超长条漫在这里按比例收缩。
|
||||
* 不再钳到屏长边:条漫页常见长宽比 1.6~1.8,显示高度本来就 > 屏长边,钳了必然每帧重采样。 */
|
||||
* 只有单页缓存字节上限(MR_PAGE_BYTES_CAP,565 口径 = 2B/px)是硬上界——超长条漫在这里按比例收缩。
|
||||
* 不再钳到屏长边:条漫页常见长宽比 1.6~1.8,显示高度本来就 > 屏长边,钳了必然每帧重采样。
|
||||
* M32 评审 P1:这里必须按 565 的 2B/px 算——乘 4 会把真机 480×853 页压到 359×639
|
||||
* (每帧重采样),等于把整单的收益吃掉。 */
|
||||
static int plan_decode_long(int want_w, int want_h)
|
||||
{
|
||||
int l0 = want_w > want_h ? want_w : want_h;
|
||||
@@ -470,7 +475,7 @@ static int plan_decode_long(int want_w, int want_h)
|
||||
int l = l0 < 64 ? 64 : l0;
|
||||
while (l > 64) {
|
||||
int s = (int)((long long)s0 * l / l0);
|
||||
if ((long long)l * s * 4 <= MR_PAGE_BYTES_CAP) break;
|
||||
if ((long long)l * s * 2 <= MR_PAGE_BYTES_CAP) break;
|
||||
l = l * 3 / 4;
|
||||
}
|
||||
return l;
|
||||
@@ -497,8 +502,9 @@ static void plan_box_size(int want_w, int want_h, int *bw, int *bh)
|
||||
}
|
||||
|
||||
/* 固定字段的解码日志:page/src/peak/path 之后是结论,便于 `grep 'reader decode'`
|
||||
* 后按列看曲线。peak = reader_estimate_peak 的预估峰值(字节/kB);path = 实际解码路径
|
||||
* (backend = M23 真缩解后端,stb = 回退旧路径)。 */
|
||||
* 后按列看曲线。peak = 本次「取页」预算口径 = reader_estimate_peak 的解码峰值
|
||||
* + 落槽 565 暂存(M32:ok/fail/skip 三种结论同一列,便于和 --wrap malloc 实测对照);
|
||||
* path = 实际解码路径(backend = M23 真缩解后端,stb = 回退旧路径)。 */
|
||||
static void log_decode(int page, int src_w, int src_h, long long peak_bytes,
|
||||
long memfree, long memavail, const char *verdict, int step,
|
||||
int backend, unsigned long long ms)
|
||||
@@ -577,7 +583,9 @@ static meow_img *reader_load_page(const char *path, void *ud, int maxdim)
|
||||
&used_backend)
|
||||
: meow_img_load_file_dim(path, dim);
|
||||
if (!im) {
|
||||
log_decode(page, have ? in.w : 0, have ? in.h : 0, dec.peak_bytes, mfree, mavail, "fail",
|
||||
/* peak 列 = 本次「取页」口径:解码峰值 + 落槽 565 暂存(与 ok/skip 同一列口径)。 */
|
||||
log_decode(page, have ? in.w : 0, have ? in.h : 0,
|
||||
dec.peak_bytes + dec.convert_bytes, mfree, mavail, "fail",
|
||||
dec.step, have && dec.path == MR_DECODE_PATH_BACKEND,
|
||||
(unsigned long long)(meow_ui_time_ms() - t0));
|
||||
return NULL;
|
||||
@@ -596,7 +604,8 @@ static meow_img *reader_load_page(const char *path, void *ud, int maxdim)
|
||||
meow_img *fit = meow_img_resample(im, box_w, box_h);
|
||||
if (fit) { meow_img_free(im); im = fit; }
|
||||
}
|
||||
log_decode(page, have ? in.w : 0, have ? in.h : 0, dec.peak_bytes, mfree, mavail, "ok",
|
||||
log_decode(page, have ? in.w : 0, have ? in.h : 0,
|
||||
dec.peak_bytes + dec.convert_bytes, mfree, mavail, "ok",
|
||||
dec.step, used_backend,
|
||||
(unsigned long long)(meow_ui_time_ms() - t0));
|
||||
return im;
|
||||
|
||||
Reference in new issue
Block a user