From db92cbd95a8519e569231fc9c1e1a3d87332d5e2 Mon Sep 17 00:00:00 2001 From: AskaEth Date: Fri, 6 Nov 2026 19:17:29 +0800 Subject: [PATCH] =?UTF-8?q?=E5=9B=BE=E5=BA=93:=20=E4=BF=AE=20M32=20?= =?UTF-8?q?=E8=AF=84=E5=AE=A1=20P2=EF=BC=88=E9=A2=84=E7=AE=97=E6=B3=A8?= =?UTF-8?q?=E9=87=8A=E6=8C=89=203=20=E6=A7=BD=E5=8F=A3=E5=BE=84=EF=BC=8C?= =?UTF-8?q?=E7=BA=AF=E6=B3=A8=E9=87=8A=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - reader.c 头注释与页缓存注释:真机 480×853 页「单页 1599KB → 800KB(−50%); 3 槽常驻 3.2MB → 2.4MB」,不再是「两页 1.6MB」。 - MR_RESIDENT_CAP 注释:典型稳态 3 槽 = 2.4MB(窗口只落 2 页时 1.6MB),上限 3.2MB。 - 无判定/常量/代码改动(git diff 只有注释行)。 --- tuku/ui/reader/reader.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tuku/ui/reader/reader.c b/tuku/ui/reader/reader.c index df97d55..9679819 100644 --- a/tuku/ui/reader/reader.c +++ b/tuku/ui/reader/reader.c @@ -17,8 +17,8 @@ * 重解一次;拖动/吸附帧只 invalidate 内容区(顶栏静态不重绘)。 * 内存(M17 起;M22 按真机实测重定;M27 接真缩解后端;M32 页槽改 RGB565): * 槽里常驻的是**已落框的 565 位图**(2B/px),单页上限 1.5MB(旧 RGBA 3MB 的同几何口径)、 - * 整窗常驻上限 3.2MB(3 槽 + 1 张在途,超限淘汰最远页)。真机 480×853 页 1599KB → 800KB, - * 两页常驻 3.2MB → 1.6MB。解码仍产出 RGBA,worker 当场转 565 再释放 RGBA;这笔暂存 + * 整窗常驻上限 3.2MB(3 槽 + 1 张在途,超限淘汰最远页)。真机 480×853 页单页 1599KB → 800KB + * (−50%);3 槽常驻 3.2MB → 2.4MB。解码仍产出 RGBA,worker 当场转 565 再释放 RGBA;这笔暂存 * (2B/px)由 reader_estimate_peak 的 convert_bytes 计入预算。解码路径与峰值预算由 * page_source 的 reader_estimate_peak() * 统一判定(唯一实现,本文件不再另写模型): @@ -97,7 +97,7 @@ #define MR_SLOT_BYTES (800L * 1024) /* 真机典型页(480×853)的 565 字节 */ /* 常驻总上限 = 3 槽 + 1 张「已解码未落槽」的在途结果 = 4 × 800KB = 3.2MB。 * 旧口径 3MB 只算槽内 RGBA(3 槽最坏 4.8MB,且在途结果完全没算);565 后把在途结果 - * 一起算进来,真实上限反而收紧。典型稳态(2 页)1.6MB,只有上限的一半。 */ + * 一起算进来,真实上限反而收紧。典型稳态 3 槽 = 2.4MB(窗口只落 2 页时 1.6MB),上限 3.2MB。 */ #define MR_RESIDENT_CAP (4 * MR_SLOT_BYTES) #define MR_SLOT_TOL 2 /* 缓存图与显示框允许的像素偏差(≤2 走原生 blit,不重采样) */ @@ -164,7 +164,7 @@ static int g_fail_paint; /* 窗口内出现解码失败页 → tick /* ---- 页图缓存(≤3 槽,RGB565 常驻)---- * 槽里存的是**已落框**的 565 位图(2B/px),不是解码器的 RGBA:真机 480×853 页 - * 1599KB → 800KB,两页常驻 3.2MB → 1.6MB。命中页绘制 = 每行一次 memcpy(M32)。 */ + * 单页 1599KB → 800KB(−50%),3 槽常驻 3.2MB → 2.4MB。命中页绘制 = 每行一次 memcpy(M32)。 */ typedef struct page_bmp { int w, h; uint16_t *px; /* w*h,行优先,RGB565(不透明) */