SPINNINGTOP · 效能線交接
陀螺效能量測交接
我方在 feat/verified-perf-optimizations 上做的量測基建、實測帳單與優化嘗試 —— 給 Barry 團隊
帳單:三樣視覺各要付多少
場面:26 隻怪真戰鬥、骨架 60Hz(posediv=1)。ABBA 交替 + 當日零效果臂制度,三個 Δ 皆過判準門檻。
| 配置 | 每幀 | 幀率 | 相對成本 |
|---|---|---|---|
| 骨架 60Hz(影子描邊關) | 16.67 ms | 59.98 | 免費 · hold 60 |
| +即時影子 | 18.37 ms | 54.5 | +1.700 ms |
| +描邊(outline) | 19.03 ms | 52.5 | +2.360 ms |
| 三樣全開(已拍板出貨配置) | 20.63 ms | 48.5 | +3.960 ms(下界) |
拍板紀錄:蔡 2026-08-21 選「都先開」——交付分支 feat/impl-visuals-on-20260821@0847dc83 已完成 push。骨架 60Hz 在所有配置皆免費;「+3.96 為下界」因基準臂貼 60fps 天花板。
六種省效能的方法與誠實結果
1 · 骨架搬出場景樹 有效但幀率量不到
引擎每幀走訪節點 830 → 165(−80%),兩輪一致;幀時 Δ 低於雜訊。分支 c67d082c,保留不併。
2 · 姿勢共用池 有效但幀率量不到
同種怪同進度共算一次姿勢,mixer 計算 −59%;幀時 Δ 低於雜訊。分支 84f3d334,保留不併。
3 · 上述兩者合併 與零不可分
合併臂 Δ=−0.137 ≈ 當日零效果臂(+0.128)⇒ CPU 側正式收案:瓶頸不在骨架 CPU。可加性檢查同時反證單臂數字屬雜訊。分支 d1da5972。
4 · 動畫相位分桶 場面限定不做
查證發現本遊戲相位偏移天生只有 10 種(seed % 10)——天然分組已比 30Hz 格點粗,再分無物可併;強制縮更少組才有效但引入可見同步感。留有復活條件與視覺刻度。
5 · 描邊併入本體 副作用淨虧,不採用
CPU 確實省一半,但描邊被拉進 shadow pass(陰影幾何 +15%)⇒ 影子開時淨虧 1.26ms。符號隨影子開關翻轉,兩場面皆實測。分支 8c901d56。
6 · 描邊共用骨架紋理 最有希望 · 待複測
不併物件、只把 boneTexture/matricesTexture 指向本體:setBonesAt 54→27、triangles 不變(雙向硬判準)、描邊可見性以環帶判準驗過。Δ=+1.301ms 因當日量測台不穩暫不可宣稱——安靜時段複測一輪即可定案(坐實=補回缺口 1/3)。分支 e88f2315。順帶拆出既有洩漏修復(描邊物件從未被 dispose):bae47ee2,可直接併。
量測工具(已在分支上,可直接用)
- 量測特別版打包
npm run build:measure→dist-measure/與正式版同款打包、只多量測接口;正式產物零殘留由雙向守衛保證 - 固定測試場景
?bench=1&z=man:26固定怪數與位置,數字可跨輪互比 - 每幀工作量計數器
__workStats()骨骼計算、貼圖上傳、draw call——回答「改動有沒有生效」,不只看幀率 - 骨架更新率計數器 每隻怪每秒實際算幾次姿勢(量出 20Hz 真相的儀器)
- 每秒回報器(beacon) 板子每秒回傳幀率與計數器,不掛 CDP(掛著會汙染數字)
- 功能開關組
perfcase=shadow-on / outline-on、?posediv=N、?nowebgl2d單變因即時切換(量測版限定) - 防漏門神
npm run doctor:measure正式產物量測符號必為 0/量測產物必存在,缺目錄會紅並明說未檢查 - 自檢器
__workSelfTest()故意多做一次看計數器 +1——分辨「真的 0」與「儀器沒接上」
量測規矩三條(與工具同等重要):每量測日開場先跑零效果臂(當日雜訊底);一律 ABBA 交替(台有「後跑者慢 0.25–0.46ms」的順序偏差,實測);Δ 小於當日雜訊底照實寫「量不到」。完整手冊在 repo:.agents/skills/perf-board-testing/SKILL.md。
在 Barry 分支上發現的三件事
- stagger 實際是 20Hz,不是 30Hz ——
verifiedPoseDivisor=3;計數器實測每隻 20.00 次/秒。ZombieAdapter內 30Hz 那句註解是錯的(我們已在 stack 分支修正)。蔡嫌「看起來 lag」的現況基準=20Hz。 - 「動畫分組 K=12 與 K=0 相同」的原因找到了 —— 相位天生只有 10 種,K ≥ 10 都是 no-op(與我們 posehz 量化的發現同一機制)。
- 陀螺併批(six-draws)的 PropAdapter 沒有 initSkeleton —— 刀片蒙皮成像不會轉的歷史缺陷在此分支同在;測試結構性抓不到,需實際遊玩驗證刀片自轉。
分支對照與證據入口
- 主座
feat/impl-stack-on-barry-20260820@fdfb7a08—— 量測基建+開關全在這裡,Barry 預設零改動 - 交付
feat/impl-visuals-on-20260821@0847dc83—— 「都先開」預設翻轉(影子/描邊/60Hz 三項正式預設開,蔡知情拍板;驗證全過、對基底新紅 0) - 可併
feat/impl-outline-dispose-20260821@bae47ee2—— 洩漏修復,獨立 - 存證 arm1
c67d082c· arm384f3d334· combinedd1da5972· merge8c901d56· sharee88f2315
- 收支表定稿:
F:\tmp\spin-evidence-20260812\settlement-20260821.md - 逐輪原始數據(方法、對照、撤回紀錄):
F:\tmp\spin-evidence-20260812\board\runs\49–64 - 效能總報告(兩線對照):spinningtop-docs.pages.dev/perf-status-20260820