diff options
| author | Somhairle H. Marisol <[email protected]> | 2026-09-29 09:42:17 +0800 |
|---|---|---|
| committer | Somhairle H. Marisol <[email protected]> | 2026-09-29 09:42:17 +0800 |
| commit | f01aa1a9a8d19db5ab908ddbb30b0467be8aa092 (patch) | |
| tree | 2385fd0b75b3b35f5a29ac9b5c02d9b9e5aea13b /docs/evidence/p70-verification.txt | |
| parent | 54732d906a68d89ee1446ddb82ae639a016925be (diff) | |
| download | living-village-f01aa1a9a8d19db5ab908ddbb30b0467be8aa092.tar.gz | |
p70: 启动帧率与渲染基准(真实可复跑数据)
- scripts/bench-p70.sh:两档基准——Kernel --performance-baseline(6000 tick ×3)
+ Desktop xvfb 60s 真实帧循环;scripts/analyze-p70.py 汇总裁决
- Game.fs:LV_FRAME_LOG=1 逐帧日志(墙钟帧间隔 + GC 线程分配增量 + tick/panel),
仅新增日志,不改渲染/更新逻辑
- P70PerformanceBaselineTests:Pin --performance-baseline final_digest=953775FA…(防漂移)
- 实测:Kernel tps mean=466679 alloc=3032184 gen0/1/2=0/0/0 determinism=PASS;
Desktop 60s frames=8788 fps=139.3 mean=7.179ms max=33.919ms 掉帧>33.3ms=2
每帧分配 mean=231KB p95=297KB;dotnet-counters 缺席已如实标注
- Desktop 338/338、Kernel 120/120;Kernel/Sim/渲染口径/字形表未动
Diffstat (limited to 'docs/evidence/p70-verification.txt')
| -rw-r--r-- | docs/evidence/p70-verification.txt | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/docs/evidence/p70-verification.txt b/docs/evidence/p70-verification.txt new file mode 100644 index 0000000..6794edc --- /dev/null +++ b/docs/evidence/p70-verification.txt @@ -0,0 +1,49 @@ +P70(启动帧率与渲染绘制概要基准)验证记录 +基线:commit 1d56991(P69)。本单未 push。 + +目标与可见性 +- 为「性能吞吐/分配/GC 基准与真实数据」补一组真实可复跑的 Desktop 侧基准;本单可在桌面/dev UI 观看。 +- 不宣称未测性能:只列本次实跑数字,未测项如实标注。 + +改动 +- src/LivingVillage.Desktop/Game.fs:新增 LV_FRAME_LOG=1 逐帧日志(仅日志,不改渲染/更新逻辑)—— + 每帧打印墙钟帧间隔 `ms`、线程分配增量 `alloc_kb`(GC.GetAllocatedBytesForCurrentThread)、 + tick 与当前 panel。配合 LV_PERF_SOAK_SECONDS + LV_AUTOPLAY_SAMPLE + LV_UNLOCK_FPS 跑 N 秒真实帧循环。 +- src/LivingVillage.Kernel.Tests/P70PerformanceBaselineTests.fs(新):Pin Headless --performance-baseline + 最终 digest = 953775FA…(防 Kernel/Sim 漂移)+ fsproj 挂载。 +- scripts/bench-p70.sh(新):Kernel 吞吐 + Desktop 60s xvfb 帧循环两档,落盘后调 analyzer。 +- scripts/analyze-p70.py(新):汇总数字与裁决,写 docs/evidence/p70-analysis.txt。 + +命令 / 环境 / 输入 +- 构建:dotnet build LivingVillage.sln -c Release +- 基准:P70_SECONDS=60 bash scripts/bench-p70.sh /tmp/opencode/lv-p70 + - Kernel:dotnet src/LivingVillage.Headless/bin/Release/net8.0/LivingVillage.Headless.dll --performance-baseline + (seed=42 npc=4 warmup=120 measure=6000 ×3) + - Desktop:xvfb-run -a -s "-screen 0 1280x720x24" env LV_AUTOPLAY_SAMPLE=1 LV_PERF_SOAK_SECONDS=60 + LV_FRAME_LOG=1 LV_UNLOCK_FPS=1 LV_LEGACY_MAP=1 LV_RECORD_DIR=... dotnet .../LivingVillage.Desktop.dll +- 环境:linux,Xvfb 软件渲染(llvmpipe),1280x720;dotnet-counters=missing(逐帧分配改由进程内 + GC API 实测,非 counters)。 + +实测数字(本次,不外推) +- Kernel 吞吐(6000 tick ×3):ticks_per_second mean=466679 / min=278557 / max=646089; + allocated_bytes mean=3032184;gc gen0/1/2=0/0/0;determinism=PASS;final_digest=953775FA…7F6C(钉值一致)。 +- Desktop 帧循环(60s,解锁 vsync/固定步长):frames=8788,wall=63087ms,measured_fps=139.3; + frame interval ms mean=7.179 / min=1.664 / max=33.919 / p50=7.909 / p95=9.847 / p99=10.823 / std=2.262; + 掉帧 >25ms=4(0.05%)、>33.3ms=2(0.02%);每帧分配 KB mean=231.22 / p95=297.00 / max=1835.20。 +- 说明:帧率依赖机器与 xvfb 软件渲染,本报告只列实测,不设硬性 fps 门槛。 +- 未测项:dotnet-counters 缺席 → live counters 无;已用 GC API 替代给出每帧分配。 + +复现 + dotnet build LivingVillage.sln -c Release + P70_SECONDS=60 bash scripts/bench-p70.sh /tmp/opencode/lv-p70 + cat docs/evidence/p70-analysis.txt # verdict 应为 PASS + +验收 +- dotnet build -c Release → 0 错误,1 警告(P40ArtTests.fs FS0760,既有)。 +- Desktop 338/338(--no-build);Kernel 120/120(--no-build,含新增 Pin 1 例)。 +- p70-analysis.txt verdict=PASS,含真实数字(见上)。 + +边界 +- 未改 Kernel/Sim 数值路径、渲染口径、字形表、地图生成;未 push。 +- 提交物:脚本 + 证据(analysis/env/kernel-baseline/帧日志抽样)+ 1 条 pin 测试 + 仅日志式的 Game 帧记录。 +- 完整 8956 行帧日志在 /tmp/opencode/lv-p70/desktop-log.txt(复跑生成),仓库内留 head/tail 抽样。 |
