53 lines
3.3 KiB
Markdown
53 lines
3.3 KiB
Markdown
# P1.5 Simulation 收尾说明(P2 输入基线)
|
||
|
||
## 测试设备与环境
|
||
- 设备:iQOO Neo8
|
||
- CPU:第一代骁龙 8+ 八核
|
||
- 内存:12 GB
|
||
- 系统:OriginOS 6(Android 16)
|
||
- Unity Profiler 口径:以 CPU `ms` 为主,`fps` 仅作辅助(Android 端 60 fps 上限)
|
||
- Profiler 配置:`Call Stacks = Off`(开启会额外放大 CPU 开销,不纳入本次基线)
|
||
|
||
## CPU 分阶段数据(P1.5)
|
||
| 怪物数量 | 帧率 | MoveSeperation 占比 | BuildInput 占比 | WriteBack 占比 | StateUpdate 占比 |
|
||
|--------|---------------------|--------------------|------------------|------------------|------------------|
|
||
| `500` | `60 fps (16.56 ms)` | `25.8% (4.28 ms)` | `1.2% (0.20 ms)` | `1.0% (0.17 ms)` | `0.7% (0.12 ms)` |
|
||
| `1000` | `44 fps (22.77 ms)` | `38.9% (8.86 ms)` | `1.8% (0.41 ms)` | `1.5% (0.36 ms)` | `1.0% (0.23 ms)` |
|
||
| `1500` | `33 fps (29.83 ms)` | `46.7% (13.95 ms)` | `2.0% (0.61 ms)` | `1.7% (0.51 ms)` | `1.1% (0.35 ms)` |
|
||
| `2000` | `19 fps (53.04 ms)` | `43.1% (19.53 ms)` | `2.1% (0.97 ms)` | `1.5% (0.69 ms)` | `1.0% (0.49 ms)` |
|
||
|
||
## Memory 对比(P1 -> P1.5)
|
||
| 怪物数量 | GC Used Memory | GC Allocated In Frame | TickEnemies GC |
|
||
|--------|------------------|-----------------------|-----------------|
|
||
| `500` | `7.8 -> 7.9 MB` | `29.5 -> 2.1 KB` | `27.4 -> 0 KB` |
|
||
| `1000` | `8.8 -> 8.8 MB` | `56.6 -> 2.1 KB` | `54.5 -> 0 KB` |
|
||
| `1500` | `10.0 -> 9.0 MB` | `84.2 -> 2.1 KB` | `82.1 -> 0 KB` |
|
||
| `2000` | `11.8 -> 9.9 MB` | `109.7 -> 2.1 KB` | `107.6 -> 0 KB` |
|
||
|
||
## CPU 热路径对比(P1 -> P1.5)
|
||
说明:P1.5 的 `TickEnemies` 以四阶段总和近似对齐 P1 的 `TickEnemies ms`。
|
||
|
||
| 怪物数量 | P1 TickEnemies | P1.5 四阶段合计 | 降幅 |
|
||
|--------|----------------|------------|----------|
|
||
| `500` | `6.18 ms` | `4.77 ms` | `-22.8%` |
|
||
| `1000` | `12.80 ms` | `9.86 ms` | `-23.0%` |
|
||
| `1500` | `20.11 ms` | `15.42 ms` | `-23.3%` |
|
||
| `2000` | `29.62 ms` | `21.68 ms` | `-26.8%` |
|
||
|
||
## 结论(Checkpoint 6)
|
||
- GC 目标达成:`TickEnemies GC` 在 `500~2000` 敌人数下均为 `0 KB`,满足 `< 5 KB/frame` 目标。
|
||
- CPU 阶段可观测性达成:`BuildInput -> Move/Separation -> StateUpdate -> WriteBack` 已可稳定采样。
|
||
- 当前主瓶颈明确:`MoveSeperation` 是绝对热点(约 `43%~47%` 帧占比),P2 优先并行化该阶段。
|
||
- 评估口径可复现:Android 端受 `60 fps` 上限影响,性能判断以 CPU `ms` 为准。
|
||
|
||
## 路线收敛说明
|
||
- `SimulationWorld.Tick(...)` 已收敛为战斗内唯一仿真执行入口。
|
||
- `UseSimulationMovement` 不再承担运行时双路径路由职责,不应再作为回滚到旧 `MovementComponent` 路径的开关理解。
|
||
- 敌人、投射物与目标查询的运行时行为统一以 `SimulationWorld` 主容器和 Burst Job 管线为准。
|
||
- 验证建议:聚焦单一路径下的敌人移动、投射物生命周期、最近敌查询和 area hit 结果,而不是做旧路径 A/B 对照。
|
||
|
||
## P2 交接建议
|
||
- Job/Burst 第一优先级:`MoveSeperation` 阶段并行化。
|
||
- 保持阶段边界不变:继续维持四阶段管线与 `ProfilerMarker`,避免失去对比口径。
|
||
- 保持生命周期/索引规则不变:`EntitySync` 与 swap-back/remap 继续作为硬约束。
|