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)


问题总览

#严重度类型属性描述
1CRITICALIDLE_RUNNINGmagazine_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=未结束

证据链:

  1. [curve_data] 动画在 809ms 收敛到目标值 -304.12,此后 103 帧/1704ms 值恒定不变
  2. [trace_slice] Folme 1327 slice dur=未结束(trace录制期间动画未停止),印证动画持续空跑
  3. [tag_params] ease=spring_phy(1.0,0.18,1.0) → response=1.0, damping_ratio=0.18, mass=1.0
  4. [property_def] minVisibleChange=0f → EquilibriumChecker 阈值计算: │ valueThreshold = 0 * 0.75 = 0 │ velocityThreshold = 0 * (1000/60) = 0 │ → Math.abs(velocity) < 0 永远为 false,平衡判定失效
  5. [comparison] 同一动画中其他属性 (font_weight, translationY, notification_top) 使用正确的 minVisibleChange,未出现空跑

根因: ValueProperty 构造时 minVisibleChange=0f,导致 EquilibriumChecker 的速度阈值为 0,弹簧动画永远无法被判定到达平衡状态。动画将持续运行直到被外部 replace 或 cancel。

修复:

- ValueProperty("magazine_translateY", 0f)
+ ValueProperty("magazine_translateY", 1f)

预期: 动画将在视觉收敛后 ~50ms 内自动停止,节省 1704ms 无效计算


曲线索引

#属性曲线类型时长有效/空跑状态报告
0magazine_translateYoverdamped_spring2513ms809ms / 1704ms (64%)ISSUEreport curve
1translationYoverdamped_spring259ms259ms / 0ms (6%)OKreport curve
2notification_topoverdamped_spring277ms277ms / 0ms (5%)OKreport curve

各曲线详情

0. magazine_translateY

magazine_translateY

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

1. translationY

translationY

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

2. notification_top

notification_top

  • 值: 1380.62 → 1414.85 (delta=34.24)
  • 时长: 277ms (19 frames)
  • 收敛: 277ms, 空跑: 1 frames (5%)
  • 完整报告

排查指南

常见问题修复

问题根因修复
IDLE_RUNNINGminVisibleChange=0f设为 1f(像素属性)
SLOW_CONVERGENCEresponse 过大减小 spring response
NO_MOVEMENTtarget==current检查动画触发条件
OSCILLATION多动画竞争取消冲突动画

Folme 收敛机制

valueThreshold    = minVisibleChange * 0.75
velocityThreshold = valueThreshold * (1000/60)

停止条件: |value - target| < valueThreshold
       && |velocity| < velocityThreshold

关键: minVisibleChange = 0f 时阈值为 0,动画永不停止!

44 items under this folder.