Skip to content

mp-flutter 0.2.3

Choose a tag to compare

@jackwangfeng jackwangfeng released this 29 Sep 23:51
· 7 commits to main since this release

mp-flutter 0.2.3

着色器预热与表单/输入体验优化,减少长列表、大表单等场景的卡顿,并修复真机复测中发现的密码框、多指触控、文本桥唤醒等问题。

着色器预热

  • 首帧之后趁空闲(最近 150ms 未出帧且无手指按屏)在共享的 GrDirectContext 上预热常见绘制组合(文字、圆角裁剪图片、阴影、BoxShadow 模糊、渐变、半透明层、BackdropFilter 等),让 GL program 提前编译;有动画/滚动/触摸即暂停
  • 每片时间预算 + 重组合拆分:轻项一片最多画 8ms 让出主线程;重项(阴影 opaque/transparent、BoxShadow/BackdropFilter 按核宽拆分、颜色矩阵/混合)改为要求最近 1s 内无刷新、无触摸才画,每片一个,解决真机单片 426ms 的长任务
  • 新增 shader_warmup_light(默认关,--shader-warmup-light)只画轻项、跳过全部重项

iOS 输入体验

  • iOS 光标常亮(EditableText.debugDeterministicCursor),避免聚焦期间光标闪烁动画导致的持续 60fps 出帧;应用可在 main() 里设回 false 恢复闪烁
  • 修复:常亮光标关闭了 iOS 光标 tick 后,密码框最后一位可能明文常驻直到下一次输入或失焦;现在聚焦密码框时临时恢复 tick,失焦后再关闭

文本输入桥

  • 聚焦后 500ms 内无几何/值变化时轮询从 16ms 退到 100ms,有变化立即恢复
  • 新增触摸画布、键盘高度变化时主动 wake(),缩短退避后引擎侧变化同步到原生输入框的最坏延迟
  • 修复着色器预热的多指触控计数:直接取 touches.length 而非按 touchstart/touchend 事件次数 ±1,避免两指分开按下、一起抬起时计数卡死导致预热一直暂停

--perf-hud

  • 长帧明细拆出框架各阶段(dart=build/layout/paint/comp/…)、光栅化 raster=、文本桥 tb=/setData=、resize=
  • 每个 GL program 一行摘要(编译耗时 + attribute/uniform + 源码哈希);着色器预热逐项打点,汇总行含 heavy/skipped 计数

真机复测(iPhone 15)

  • 长列表最长帧 1061→97ms,>100ms 帧 2→0,fps 43→56
  • 大表单 >100ms 帧 6→4
  • 冷启动 3.76→3.45s

详见 docs/capability-guide.md 2.1 节。