Files
MeowOS-For-R3P2/patch_v2/ncm_app/build_ncm_sims.sh
T
AskaEth 294ed6ffc7 test(ncm): M10 宿主回归三套(44 断言)+ 构建脚本 + REPORT §42
- bench/retry_storm_sim.c(25 断言):真实 retry_ctl.c/meta_gate.c,100ms tick 断网
  120s→4 次/间隔 ≥30s;状态每 tick 抖动→2 次;时钟回退→不立即重试且间隔仍 ≥30s;
  worker 45s>间隔→不并发;META 空闲 3 帧/60s(旧 600)、播放 13 帧(≤1/5s)、
  状态抖动 ≤4 帧/秒、元数据变化/seek 立即报、超长标题截断不重报、回退不连发。
- bench/home_retry_sim.c(13 断言):真实 app/ui/home.c 的 home_tick 编进宿主
  (--gc-sections + 桩),断网 120s→4 次重试、单飞、全帧重绘 0 次;
  把真机形态的垃圾 64 位 now 喂给 home_tick 仍为 4 次/≥30s;回在线再断网不清基准。
- bench/meta_ipc_sim.c(6 断言):真实 ipc_media 线程 + 假 launcher AF_UNIX socket,
  空闲 2s 只收到 1 帧 META(旧 ~10 帧),状态翻转恰好多 1 帧,帧头合法。
- build_ncm.sh / build_ncm_host.sh:源列表加 retry_ctl.c、meta_gate.c(host 补
  mem_watch.c,否则 player_manager 链接失败);build_ncm_sims.sh 加三个 sim。
- REPORT §42:真机日志证据(时间戳低/高 32 位拆解、21016 帧 META)、根因三链、
  实现、验证(session_gate 88 / http_truncate 13 / core 139 全过)、真机验证建议。
2026-11-05 13:00:32 +08:00

190 lines
11 KiB
Bash
Executable File
Raw 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
# bench/... 各 sim 的宿主编译+运行(命令取自各 sim 文件头注释;agent 308 内存瘦身回归用)。
# 在 ncm_app 目录下运行。
set -e
cd "$(dirname "$0")"
CC=gcc
INC="-DJSMN_HEADER -I. -Icore -I../sdk -I../meow_launcherd"
VINC="-Ivendor/jsmn -Ivendor/minimp3 -Ivendor/dr_flac -Ivendor/mbedtls/include -Ivendor/mbedtls/include"
# 部分 sim 的 include 路径写法用 vendor/(window/search),有的用 ../vendor/(bench 内部相对),
# 统一用绝对相对路径(项目根 pub)。这里按各 sim 头部原样拼接。
run_sim () { echo "===== $1 ====="; ./$1; echo "[$1 exit=$?]"; }
echo "==> build stream_sim"
gcc -O2 -Wall -Wextra -DJSMN_HEADER -I. -Icore -I../sdk -I../meow_launcherd \
-Ivendor/jsmn -Ivendor/minimp3 -Ivendor/dr_flac -Ivendor/mbedtls/include \
-c bench/stream_sim.c -o /tmp/ss.o
gcc -O2 -Wall -Wextra -DJSMN_HEADER -I. -Icore -I../sdk -I../meow_launcherd \
-Ivendor/jsmn -Ivendor/minimp3 -Ivendor/dr_flac -Ivendor/mbedtls/include \
-c app/play/stream_src.c -o /tmp/ss_src.o
gcc -O2 -Wall -Wextra -DJSMN_HEADER -I. -Icore -I../sdk -I../meow_launcherd \
-Ivendor/jsmn -Ivendor/minimp3 -Ivendor/dr_flac -Ivendor/mbedtls/include \
-c app/play/decoder.c -o /tmp/ss_dec.o
gcc -O2 -Wall -Wextra -DJSMN_HEADER -I. -Icore -I../sdk -I../meow_launcherd \
-Ivendor/jsmn -Ivendor/minimp3 -Ivendor/dr_flac -Ivendor/mbedtls/include \
-c app/play/audio_out.c -o /tmp/ss_ao.o
gcc -O2 -Wall -Wextra -DJSMN_HEADER -I. -Icore -I../sdk -I../meow_launcherd \
-Ivendor/jsmn -Ivendor/minimp3 -Ivendor/dr_flac -Ivendor/mbedtls/include \
-c core/ncm_cache.c -o /tmp/ss_cache.o
gcc -O2 -Wall -Wextra -DJSMN_HEADER -I. -Icore -I../sdk -I../meow_launcherd \
-Ivendor/jsmn -Ivendor/minimp3 -Ivendor/dr_flac -Ivendor/mbedtls/include \
-c core/ncm_common.c -o /tmp/ss_common.o
gcc -O2 -Wall -Wextra -DJSMN_HEADER -I. -Icore -I../sdk -I../meow_launcherd \
-Ivendor/jsmn -Ivendor/minimp3 -Ivendor/dr_flac -Ivendor/mbedtls/include \
-c core/ncm_http.c -o /tmp/ss_http.o
gcc -O2 -Wall -Wextra -DJSMN_HEADER -I. -Icore -I../sdk -I../meow_launcherd \
-Ivendor/jsmn -Ivendor/minimp3 -Ivendor/dr_flac -Ivendor/mbedtls/include \
-c core/ncm_json.c -o /tmp/ss_json.o
gcc -O2 -c -Ivendor/minimp3 app/play/minimp3_impl.c -o /tmp/ss_mp3.o
gcc -O2 -c -Ivendor/dr_flac app/play/dr_flac_impl.c -o /tmp/ss_flac.o
gcc -O2 -o stream_sim /tmp/ss.o /tmp/ss_src.o /tmp/ss_dec.o /tmp/ss_ao.o /tmp/ss_cache.o /tmp/ss_mp3.o /tmp/ss_flac.o -lpthread -lm
run_sim stream_sim
echo "==> build player_flow_sim"
gcc -O2 -ffunction-sections -DJSMN_HEADER -I. -I../sdk -I../meow_launcherd -Icore -Ivendor/jsmn -Ivendor/mbedtls/include \
-c bench/player_flow_sim.c -o /tmp/pf.o
gcc -O2 -ffunction-sections -DJSMN_HEADER -I. -I../sdk -I../meow_launcherd \
-Icore -Ivendor/jsmn -Ivendor/mbedtls/include -Ivendor/minimp3 -Ivendor/dr_flac -Ivendor/mbedtls/include -c app/play/player_manager.c -o /tmp/pf_pm.o
gcc -O2 -ffunction-sections -DJSMN_HEADER -I. -I../sdk -I../meow_launcherd \
-Icore -c app/play/stream_src.c -o /tmp/pf_ss.o
gcc -O2 -ffunction-sections -DJSMN_HEADER -I. -I../sdk -I../meow_launcherd \
-Icore -c app/play/mem_watch.c -o /tmp/pf_mw.o # player_manager 引用(边播边监控取证,agent 32bit OOM)
gcc -O2 -ffunction-sections -DJSMN_HEADER -I. -I../sdk -I../meow_launcherd -Icore \
-c ../sdk/meow_cachegov.c -o /tmp/pf_cg.o # player_manager 引 meow_cachegov_*(page-cache 治理 A)
gcc -O2 -Wl,--gc-sections -o player_flow_sim /tmp/pf.o /tmp/pf_pm.o /tmp/pf_ss.o /tmp/pf_mw.o /tmp/pf_cg.o -lpthread -lm
run_sim player_flow_sim
echo "==> build mem_watch_sim(边播边监控阈值/滞回/调度器,宿主桩驱动;agent 32bit OOM。"
echo " mem_release_sim 无累积断言在 bench/ 头注释手动构建:需预生成 24bit flac 素材)"
gcc -O2 -Wall -Wextra -DJSMN_HEADER -I. -I../sdk -I../meow_launcherd \
-c bench/mem_watch_sim.c -o /tmp/mw.o
gcc -O2 -Wall -Wextra -DJSMN_HEADER -I. -I../sdk -c app/play/mem_watch.c -o /tmp/mw_mod.o
gcc -O2 -o mem_watch_sim /tmp/mw.o /tmp/mw_mod.o -lpthread -lm
run_sim mem_watch_sim
echo "==> build window_sim"
gcc -O2 -ffunction-sections -DJSMN_HEADER -I. -I../sdk -I../meow_launcherd -Icore -Ivendor/jsmn -Ivendor/mbedtls/include \
-c bench/window_sim.c -o /tmp/ws.o
gcc -O2 -ffunction-sections -DJSMN_HEADER -I. -I../sdk -I../meow_launcherd \
-Icore -Ivendor/jsmn -Ivendor/mbedtls/include -c app/logic/appstate.c -o /tmp/ws_app.o
gcc -O2 -ffunction-sections -DJSMN_HEADER -I. -I../sdk -I../meow_launcherd \
-Icore -Ivendor/jsmn -Ivendor/mbedtls/include -c app/logic/songmeta.c -o /tmp/ws_meta.o
gcc -O2 -Wl,--gc-sections -o window_sim /tmp/ws.o /tmp/ws_app.o /tmp/ws_meta.o \
out/core-host/ncm_apicache.o out/core-host/ncm_session.o -lpthread # appstate.c 调 ncm_apicache_*/ncm_gate_decide
run_sim window_sim
echo "==> build plpage_sim(歌单页懒加载分页 + 加载后列表刷新;真实 playlist.c 全链路 + 宿主 SDK,0 网络。"
echo " 依赖 out/host/sdk_*.o:若缺请先跑 build_ncm_host.sh)"
PPINC="-DMEOW_UI_HOST_TEST -DJSMN_HEADER -I. -I../sdk -I../meow_launcherd -Icore -Ivendor/jsmn -Ivendor/mbedtls/include -Ivendor/minimp3 -Ivendor/dr_flac"
for f in bench/plpage_sim.c app/ui/playlist.c app/logic/appstate.c app/logic/songmeta.c app/ui/chrome.c app/ui/ncm_colors.c; do
b=$(basename "$f" .c)
gcc -O2 -Wall -Wextra -ffunction-sections -fdata-sections $PPINC -c "$f" -o /tmp/pp_$b.o
done
gcc -O2 -Wl,--gc-sections -Wl,--wrap=meow_ui_paint_full -o plpage_sim \
/tmp/pp_plpage_sim.o /tmp/pp_playlist.o /tmp/pp_appstate.o /tmp/pp_songmeta.o /tmp/pp_chrome.o /tmp/pp_ncm_colors.o \
out/core-host/ncm_session.o \
out/host/sdk_*.o -lz -lpthread -lm
run_sim plpage_sim
echo "==> build search_sim"
gcc -O2 -ffunction-sections -DJSMN_HEADER -I. -I../sdk -I../meow_launcherd -Icore -Ivendor/jsmn \
-c bench/search_sim.c -o /tmp/sh.o
gcc -O2 -ffunction-sections -DJSMN_HEADER -I. -I../sdk -I../meow_launcherd \
-Icore -Ivendor/jsmn -c app/logic/appstate.c -o /tmp/sh_app.o
gcc -O2 -Wl,--gc-sections -o search_sim /tmp/sh.o /tmp/sh_app.o \
out/core-host/ncm_apicache.o out/core-host/ncm_session.o -lpthread # appstate.c 调 ncm_apicache_*/ncm_gate_decide
run_sim search_sim
echo "==> build cache_evict_sim"
gcc -O2 -DJSMN_HEADER -I. -Icore -Ivendor/mbedtls/include -c bench/cache_evict_sim.c -o /tmp/ce.o
gcc -O2 -DJSMN_HEADER -I. -Icore -Ivendor/mbedtls/include -c core/ncm_cache.c -o /tmp/ce_cache.o
gcc -O2 -o cache_evict_sim /tmp/ce.o /tmp/ce_cache.o -lpthread
run_sim cache_evict_sim
echo "==> build apicache_sim (风控加固 §1 接口级响应缓存;0 真实网络——ncm_http 计数桩)"
gcc -O2 -Wall -Wextra -DJSMN_HEADER -I. -Icore -I../sdk -I../meow_launcherd \
-Ivendor/jsmn -Ivendor/mbedtls/include \
-c bench/apicache_sim.c -o /tmp/ac.o
# 真实 core(api/req/crypto/json/common/apicache)+ 网络层计数桩(apicache_sim 已含 ncm_http_request 桩,
# 故不链 ncm_http.o)+ jsmn + 宿主 mbedtls;核心对象从 out/core-host/*.o 取(含 ncm_apicache.o)。
gcc -O2 -o apicache_sim /tmp/ac.o \
$(ls out/core-host/ncm_api.o out/core-host/ncm_req.o out/core-host/ncm_crypto.o \
out/core-host/ncm_json.o out/core-host/ncm_common.o out/core-host/ncm_apicache.o \
out/core-host/ncm_session.o) \
out/core-host/jsmn_impl.o \
-Lout/mbedtls/host -lmbedtls -lmbedx509 -lmbedcrypto -lpthread -lm
run_sim apicache_sim
echo "==> build cookie_refresh_sim (§NEW 续期端点语义;0 真实网络——ncm_http 计数桩)"
gcc -O2 -Wall -Wextra -DJSMN_HEADER -I. -Icore -I../sdk -I../meow_launcherd \
-Ivendor/jsmn -Ivendor/mbedtls/include \
-c bench/cookie_refresh_sim.c -o /tmp/crs.o
gcc -O2 -o cookie_refresh_sim /tmp/crs.o \
$(ls out/core-host/ncm_login.o out/core-host/ncm_req.o out/core-host/ncm_crypto.o \
out/core-host/ncm_json.o out/core-host/ncm_common.o out/core-host/ncm_store.o \
out/core-host/ncm_session.o out/core-host/v_qrcodegen.o) \
out/core-host/jsmn_impl.o \
-Lout/mbedtls/host -lmbedtls -lmbedx509 -lmbedcrypto -lpthread -lm
run_sim cookie_refresh_sim
echo "==> build session_gate_sim(M9 离线会话保持/登录门:分类矩阵 + HTTP 状态/业务码映射 + 会话密钥稳定性;0 真实网络)"
mkdir -p out/chk
gcc -O2 -Wall -Wextra -DJSMN_HEADER -I. -Icore -Ivendor/jsmn -Ivendor/mbedtls/include \
-c bench/session_gate_sim.c -o out/chk/sg.o
gcc -O2 -o session_gate_sim out/chk/sg.o \
$(ls out/core-host/ncm_api.o out/core-host/ncm_login.o out/core-host/ncm_req.o \
out/core-host/ncm_crypto.o out/core-host/ncm_json.o out/core-host/ncm_common.o \
out/core-host/ncm_store.o out/core-host/ncm_apicache.o out/core-host/ncm_session.o) \
out/core-host/jsmn_impl.o out/core-host/v_qrcodegen.o \
-Lout/mbedtls/host -lmbedtls -lmbedx509 -lmbedcrypto -lpthread -lm
run_sim session_gate_sim
echo "==> build account_cookie_sim (§NEW 临期续期决策;真实 account.c + 外围桩,0 真实网络)"
gcc -O2 -Wall -Wextra -DJSMN_HEADER -I. -Iapp -Icore -I../sdk -I../meow_launcherd \
-Ivendor/jsmn -Ivendor/qrcodegen/c -Ivendor/mbedtls/include \
-c app/logic/account.c -o /tmp/acs_account.o
gcc -O2 -Wall -Wextra -DJSMN_HEADER -I. -Iapp -Icore -I../sdk -I../meow_launcherd \
-Ivendor/jsmn -Ivendor/qrcodegen/c -Ivendor/mbedtls/include \
-c bench/account_cookie_sim.c -o /tmp/acs.o
gcc -O2 -o account_cookie_sim /tmp/acs.o /tmp/acs_account.o -lpthread -lm
run_sim account_cookie_sim
echo "==> build http_truncate_sim (ncm_http 截断守卫宿主测试;mock mbedtls 传输层,0 真实网络)"
gcc -O2 -Wall -Wextra -DJSMN_HEADER -I. -Icore -Ivendor/mbedtls/include \
-c bench/http_truncate_sim.c -o /tmp/t.o
gcc -O2 -Wall -Wextra -DJSMN_HEADER -I. -Icore -Ivendor/mbedtls/include \
-ffunction-sections -c core/ncm_http.c -o /tmp/t_http.o
gcc -O2 -Wall -Wextra -DJSMN_HEADER -I. -Icore -Ivendor/mbedtls/include \
-ffunction-sections -c core/ncm_common.c -o /tmp/t_common.o
gcc -Wl,--gc-sections -o http_truncate_sim /tmp/t.o /tmp/t_http.o /tmp/t_common.o
run_sim http_truncate_sim
echo "==> build retry_storm_sim(M10 断网重试风暴 / META 洪泛 节奏闸:纯逻辑,0 网络 0 SDK)"
mkdir -p out/chk
gcc -O2 -Wall -Wextra -o out/chk/retry_storm_sim bench/retry_storm_sim.c \
app/logic/retry_ctl.c app/play/meta_gate.c -lpthread
run_sim out/chk/retry_storm_sim
echo "==> build home_retry_sim(M10 真实 ui/home.c 的 home_tick 离线重试回归;网络/UI 桩在测试内)"
HINC="-DMEOW_UI_HOST_TEST -DJSMN_HEADER -I. -I../sdk -I../sdk/include -I../meow_launcherd -Icore -Ivendor/jsmn"
for f in app/ui/home.c app/logic/retry_ctl.c bench/home_retry_sim.c; do
b=$(basename "$f" .c)
gcc -O2 -Wall -Wextra -ffunction-sections -fdata-sections $HINC -c "$f" -o "out/chk/m10_$b.o"
done
gcc -Wl,--gc-sections -o out/chk/home_retry_sim \
out/chk/m10_home.o out/chk/m10_retry_ctl.o out/chk/m10_home_retry_sim.o -lpthread
run_sim out/chk/home_retry_sim
echo "==> build meta_ipc_sim(M10 真实 play/ipc_media.c + 假 launcher socket 的 META 帧频回归)"
for f in app/play/ipc_media.c app/play/meta_gate.c bench/meta_ipc_sim.c; do
b=$(basename "$f" .c)
gcc -O2 -Wall -Wextra -ffunction-sections -fdata-sections $HINC -c "$f" -o "out/chk/m10_$b.o"
done
gcc -Wl,--gc-sections -o out/chk/meta_ipc_sim \
out/chk/m10_ipc_media.o out/chk/m10_meta_gate.o out/chk/m10_meta_ipc_sim.o -lpthread
run_sim out/chk/meta_ipc_sim
echo "===== all sims done ====="