Folme 动画曲线分析总报告
生成时间: 2026-05-09 10:58
Trace:/home/zbc/pangu/GeneralAndroid/main/hideapi/tool_new/output/trace/perfetto_1778220614.pftrace
动画段数: 3
问题总数: 1 (CRITICAL: 1, HIGH: 0)
问题总览
| # | 严重度 | 类型 | 属性 | 描述 |
|---|---|---|---|---|
| 1 | CRITICAL | IDLE_RUNNING | magazine_translateY | 动画空跑:收敛后仍运行 103 帧 (1704ms),占总帧数 64% |
根因诊断摘要
IDLE_RUNNING — magazine_translateY
Folme Slice: ID=1327, tag=all_in_one_lock_screen, ease=spring_phy(1.0, 0.18, 1.0), dur=未结束
证据链:
- [curve_data] 动画在 809ms 收敛到目标值 -304.12,此后 103 帧/1704ms 值恒定不变
- [trace_slice] Folme 1327 slice dur=未结束(trace录制期间动画未停止),印证动画持续空跑
- [tag_params] ease=spring_phy(1.0,0.18,1.0) → response=1.0, damping_ratio=0.18, mass=1.0
- [property_def] minVisibleChange=0f → EquilibriumChecker 阈值计算: │ valueThreshold = 0 * 0.75 = 0 │ velocityThreshold = 0 * (1000/60) = 0 │ → Math.abs(velocity) < 0 永远为 false,平衡判定失效
- [comparison] 同一动画中其他属性 (font_weight, translationY, notification_top) 使用正确的 minVisibleChange,未出现空跑
根因: ValueProperty 构造时 minVisibleChange=0f,导致 EquilibriumChecker 的速度阈值为 0,弹簧动画永远无法被判定到达平衡状态。动画将持续运行直到被外部 replace 或 cancel。
修复:
- ValueProperty("magazine_translateY", 0f)
+ ValueProperty("magazine_translateY", 1f)预期: 动画将在视觉收敛后 ~50ms 内自动停止,节省 1704ms 无效计算
曲线索引
| # | 属性 | 曲线类型 | 时长 | 有效/空跑 | 状态 | 报告 |
|---|---|---|---|---|---|---|
| 0 | magazine_translateY | overdamped_spring | 2513ms | 809ms / 1704ms (64%) | ISSUE | report curve |
| 1 | translationY | overdamped_spring | 259ms | 259ms / 0ms (6%) | OK | report curve |
| 2 | notification_top | overdamped_spring | 277ms | 277ms / 0ms (5%) | OK | report curve |
各曲线详情
0. magazine_translateY

- 值: -326.10 → -304.12 (delta=21.98)
- 时长: 2513ms (160 frames)
- 收敛: 809ms, 空跑: 103 frames (5%)
- [CRITICAL] 动画空跑:收敛后仍运行 103 帧 (1704ms),占总帧数 64%
- 完整报告
1. translationY

- 值: -326.10 → -304.12 (delta=21.98)
- 时长: 259ms (17 frames)
- 收敛: 259ms, 空跑: 1 frames (5%)
- 完整报告
2. notification_top

- 值: 1380.62 → 1414.85 (delta=34.24)
- 时长: 277ms (19 frames)
- 收敛: 277ms, 空跑: 1 frames (5%)
- 完整报告
排查指南
常见问题修复
| 问题 | 根因 | 修复 |
|---|---|---|
| IDLE_RUNNING | minVisibleChange=0f | 设为 1f(像素属性) |
| SLOW_CONVERGENCE | response 过大 | 减小 spring response |
| NO_MOVEMENT | target==current | 检查动画触发条件 |
| OSCILLATION | 多动画竞争 | 取消冲突动画 |
Folme 收敛机制
valueThreshold = minVisibleChange * 0.75
velocityThreshold = valueThreshold * (1000/60)
停止条件: |value - target| < valueThreshold
&& |velocity| < velocityThreshold
关键: minVisibleChange = 0f 时阈值为 0,动画永不停止!