Repository navigation
mp-flutter 0.2.3
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 节。