Files
AskaEth 68ce46a5d8 fix(ncm §32): 内存瘦身修 OOM 被杀 —— 封面降采样(8.28MB→0.78MB) + 瞬态 rbuf 缩减 + 线程栈显式
真机 dmesg 实锤:OOM Kill ncm (score 460, anon-rss 26.9MB, 设备 56MB)。
画像:封面全分辨率 RGBA 8.28MB(1448x1448 原生解码驻留) 是最大可控块。

瘦身(按收益排序):
1. sdk meow_ui_img 新增纯增量 meow_img_downscale + cover.c cover_cap(≤480px)
   → 封面 8.28MB→0.78MB,-7.65MB(mem_sim 实测 PASS)。
2. ncm_api.c 瞬态响应 rbuf:song_url→64KB、lyric/song_detail/cloudsearch/user_playlist→256KB
   (detail/track_all 保 1MB)。
3. ncm_app_internal.h 新增 ncm_thread_create(显式 128KB 栈),替换全部 14 处 pthread_create。
4. 滑动窗口/meta 复核零回退(window_sim:608B/首,6000 首 280KB 恒定)。

验证:mem_sim 封面收益 PASS + host home/player 渲染 OK + stream_sim/player_flow_sim/
window_sim/search_sim/cache_evict_sim 全 PASS + test_ncm_core host+mipsel(qemu) PASS
+ build_ncm.sh -Wall -Wextra 0 warning。真机 scp 播放在跑确认(缓存曲,0 播放请求)。

新 ncm md5 44fa16fe(text 1015150/bss 1362500)。正式部署留主会话。
2026-09-02 03:43:42 +08:00

48 lines
2.3 KiB
Bash
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/bin/bash
# build_ncm_host_mem.sh — 宿主编译 ncm 的真实页面/逻辑(离屏 480x720)+ 内存测量 harness。
#
# 与 build_ncm_host.sh 的差异:
# * 复用既有 out/host/sdk_*.o(SDL 层既有对象,避免 SDK meow_ui_gfx.c 当前工作区
# 的注释语法缺陷导致全量 SDK 重编失败),仅重编 meow_ui_img.c(新增 meow_img_downscale)。
# * 用途:验证封面降采样(内存瘦身)在宿主按预期工作;供 mem_sim 报告各场景 RSS。
# 运行:MEM_SIM=1 ./ncm_host(内置内存自测)或 NCM_PAGE=home MEOW_UI_DUMP=/tmp/home.ppm ./ncm_host
cd "$(dirname "$0")"
ROOT="$HOME/Project/R3ProII"
OUT="$PWD/out"
mkdir -p "$OUT/host"
CC_HOST=${CC_HOST:-gcc}
SDK_DIR="$ROOT/patch_v2/sdk"
MBED="$OUT/mbedtls/host"
INC="-I. -I../sdk -I../meow_launcherd -Icore \
-I$SDK_DIR -I$ROOT/patch_v2/meow_launcherd \
-Ivendor/mbedtls/include -Ivendor/jsmn -Ivendor/qrcodegen/c -Ivendor/minimp3 -Ivendor/dr_flac"
echo "==> recompile host meow_ui_img (adds meow_img_downscale)"
$CC_HOST -O2 -c -DMEOW_UI_HOST_TEST -I"$SDK_DIR" -I"$ROOT/patch_v2/meow_launcherd" \
"$SDK_DIR/meow_ui_img.c" -o "$OUT/host/sdk_meow_ui_img.o" || exit 1
echo "==> host app sources (exclude app.c: test provides main + g_st)"
APP_SRC="app/ui/login.c app/ui/home.c app/ui/playlist.c app/ui/player.c \
app/ui/settings.c app/ui/search.c app/ui/ncm_colors.c app/ui/chrome.c \
app/logic/appstate.c app/logic/lyric.c app/logic/songmeta.c \
app/logic/cover.c app/logic/account.c app/play/player_manager.c app/play/audio_out.c \
app/play/ipc_media.c app/play/decoder.c app/play/stream_src.c app/play/minimp3_impl.c"
for f in $APP_SRC; do
b=$(basename "$f" .c)
$CC_HOST -O2 -c -DMEOW_UI_HOST_TEST -DJSMN_HEADER $INC "$f" -o "$OUT/host/$b.o" || { echo "app $f FAILED"; exit 1; }
done
# dr_flac 实现 TU
$CC_HOST -O2 -c -Ivendor/dr_flac app/play/dr_flac_impl.c -o "$OUT/host/dr_flac_impl.o" || exit 1
$CC_HOST -O2 -c -DMEOW_UI_HOST_TEST -DJSMN_HEADER $INC app/test/test_ncm_app.c -o "$OUT/host/app_test.o" || exit 1
echo "==> link ncm_host"
$CC_HOST -O2 -o ncm_host \
"$OUT/host"/*.o \
out/core-host/*.o \
-L"$MBED" -lmbedtls -lmbedx509 -lmbedcrypto \
-lz -lpthread -lm
ls -la ncm_host
echo "run: NCM_PAGE=home MEOW_UI_DUMP=/tmp/home.ppm ./ncm_host (or MEM_SIM=1 ./ncm_host)"