真机 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)。正式部署留主会话。
48 lines
2.3 KiB
Bash
Executable File
48 lines
2.3 KiB
Bash
Executable File
#!/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)"
|