You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
AdLike2048/docs/性能打点说明.md

185 lines
5.5 KiB

3 weeks ago
# 性能辅助打点解读说明(PF- 系列)
> **用途**:线上灰度/全量后辅助验证加载、内存、流畅度优化效果。
> **不是运营打点**:不进入 Gravity `userAction` 广告/关卡漏斗;后台筛选 **`PF-` 前缀** 或平台原始日志里搜 `性能打点`。
---
## 1. 为何与「看广告」统计分开?
历史问题:`GEMgr.GEReportEvent` 用 `msg.indexOf('AD')` 判断是否广告,会把下列内容**误判为广告**:
- 机型含 **Android / iPad**(子串 `AD`)
- 资源快照 `…P12A456…`(`A` 与 `D` 相邻的极端情况)
- 昨日性能文案 `内存预载-…` 走 `inLevel` 进了 Gravity
**本次修复**:
| 项 | 做法 |
|----|------|
| 广告识别 | 仅 `-AD-` 或含「广告」 |
| 性能上报 | 新通道 `gg.sdk.reportPerf()`,前缀 **`PF-`**,**不进 Gravity** |
| 旧性能文案 | 已从 `reportDY('inLevel', …)` 迁出 |
---
## 2. 消息格式
```
PF-{域}-{标签}-{详情}
```
- 全文**不得**使用域标签 `LOAD`(L**AD** 子串);加载域用 **`LD`**
- 详情禁止 `-AD-`、「广告」、机型原文
- 详情用 `_` 连接键值,资源快照固定为 `b{bundle}p{pkg}a{asset}r{preloaded}`
### 域一览
| 域 | 含义 | 频率 |
|----|------|------|
| `BOOT` | 启动分级 | 每会话 1 次 |
| `LD` | 加载耗时(勿用 LOAD,含 AD 子串) | 见子标签 |
| `PRE` | 预载完成 | 有冷却 |
| `MEM` | 内存告警/降档 | 有冷却 |
| `THRM` | 帧率/发热策略 | 相位变化,30s 冷却 |
| `SESS` | 会话段落结束快照 | 有冷却 |
---
## 3. 事件清单与解读
### 3.1 启动分级 `PF-BOOT-TIER-…`
**示例**:`PF-BOOT-TIER-mtier0_ttier0_qm_d3_c12`
| 字段 | 含义 |
|------|------|
| `m*` | 内存档位 MemoryProfile:`tier0/1/3` |
| `t*` | 发热档位(与内存 tier 对齐) |
| `q*` | 画质档位 DeviceProfile:`ql/qm/qh` |
| `d*` | 登录天数 |
| `c*` | 当前章节进度 |
**怎么看**:对比不同 `m/t/q` 组合下的加载、内存告警率;优化后同机型 tier 分布应更稳定。
---
### 3.2 加载 `PF-LD-*`(Load 缩写 LD,避免 LOAD 中的 AD 子串)
| 标签 | 示例 | 含义 |
|------|------|------|
| `SDK` | `PF-LD-SDK-3s` | SDK+存档初始化耗时(会话 1 次) |
| `RES` | `PF-LD-RES-8s` | Boot 资源包加载(会话 1 次) |
| `HALL` | `PF-LD-HALL-5s` | 进可交互大厅耗时 |
| `BTL` | `PF-LD-BTL-ch12_6s` | 进战斗可交互耗时,`ch`+章节 id |
**怎么看**:
- P50/P90 是否下降(重点关注 `LD-BTL`、`LD-HALL`)
- 同一章节 `ch*` 优化前后对比
- `SDK`/`RES` 只在冷启动看一次,别按对局频率算
---
### 3.3 预载 `PF-PRE-*`
| 标签 | 示例 |
|------|------|
| `HALL` | `PF-PRE-HALL-8s_b3p12a456r78` |
| `CH` | `PF-PRE-CH-ch12_15s_n42_b3p12a78` |
| 字段 | 含义 |
|------|------|
| `*s` | 预载耗时(秒,至少 1) |
| `n*` | 章节预载资源条目数(仅 CH) |
| `b/p/a/r` | 完成时刻 bundle 数 / pkg 数 / asset 数 / 已预载 key 数 |
**怎么看**:耗时与 `b/p/a/r` 是否同向变化;优化后应用更少 `a/r` 或更短 `*s` 达到相同体验。
---
### 3.4 内存 `PF-MEM-*`
| 标签 | 示例 | 触发 |
|------|------|------|
| `WARN` | `PF-MEM-WARN-ph3_w2_lv2_b5p10a500r80` | 平台 `onMemoryWarning` |
| `DG` | `PF-MEM-DG-lv1_ph2` | 降档 D1/D2 生效 |
**相位 ph***:`0`启动 `1`大厅 `2`大厅预载 `3`战斗 `4`战斗退出 `9`其它
| 字段 | 含义 |
|------|------|
| `w*` | 当前相位内第几次告警 |
| `lv*` | 降档级别 0/1/2 |
**怎么看**:
- `MEM-WARN` 占比高 → 内存仍紧,看 `ph3` 是否集中(战斗中)
- 出现 `MEM-DG-lv2` → 已触发停 silent 预载 + 大厅 30fps,需结合 `THRM-FPS` 看
---
### 3.5 流畅度 `PF-THRM-FPS-…`
**示例**:`PF-THRM-FPS-ph1_fps45_s0`
| 字段 | 含义 |
|------|------|
| `ph*` | ResourcePhase(见上表,与 MEM 略有不同:Boot=0) |
| `fps*` | 实际设置的目标帧率 |
| `s*` | 内存 stress 级别 0/1/2 |
**怎么看**:
- 大厅 `ph1/ph2` 应为 **45**(tier0 配置),战斗 `ph3` 应为 **60**
- `s1/s2` 出现时 fps 是否降到 30(D2 大厅压帧)
---
### 3.6 会话段 `PF-SESS-END-…`
**示例**:`PF-SESS-END-hall_b3p12a400r60`
| 值 | 含义 |
|----|------|
| `hall` | 回到大厅完成 |
| `battle_exit` | 战斗 teardown 开始 |
末尾快照同 `b/p/a/r`,用于看**离开战斗后**资源是否回落。
---
## 4. 后台怎么筛(给策划/运营)
1. 事件流 / 原始日志搜索:**`PF-`** 或 **`性能打点`**
2. **不要**用「广告次数」面板看这些(已隔离)
3. 建议按天导出后 Excel 透视:
- 行:事件域(BOOT/LOAD/MEM…)
- 值:次数、平均耗时(从 `*s` 解析)
---
## 5. 两天线上看什么算「有效」
| 指标 | 期望趋势(相对优化前) |
|------|------------------------|
| `LD-HALL` / `LD-BTL` P90 | 下降或持平 |
| `MEM-WARN` 人均次数 | 下降 |
| `MEM-DG-lv2` 占比 | 下降 |
| `PRE-HALL` 的 `a/r` | 下降或持平而耗时不变 |
| `THRM-FPS` 战斗 ph3=60 占比 | 稳定高位 |
---
## 6. 代码入口(程序)
- 统一模块:`assets/script/game/PerfReport.ts`
- 上报 API:`gg.sdk.reportPerf(msg)`(`SDKManager.ts`)
- 运营打点仍用:`gg.sdk.reportDY('inLevel', msg)`(勿混用)
新增性能点**必须**:
1. 走 `PerfReport` 封装,不要直接 `reportDY`
2. 域标签禁止 `LOAD`(含 AD 子串);详情禁止 `-AD-`/「广告」/机型原文
3. 加会话去重或冷却,避免刷屏