【发布时间】:2021-04-05 16:50:57
【问题描述】:
从 Flutter 1.12 开始(当 Flutter 从 OpenGL 切换到 Metal 渲染时),应用程序的首次运行似乎卡顿(更频繁地跳帧)。
Flutter 团队是 working on this,但与此同时,我能做什么?
【问题讨论】:
从 Flutter 1.12 开始(当 Flutter 从 OpenGL 切换到 Metal 渲染时),应用程序的首次运行似乎卡顿(更频繁地跳帧)。
Flutter 团队是 working on this,但与此同时,我能做什么?
【问题讨论】:
在任何事情之前:确保您看到的卡顿确实与此问题相关。如果您的应用程序在 iOS 中的 OpenGL 后端已经卡顿,或者在 Android 上卡顿(实现了着色器缓存),您可能还有其他一些与性能相关的问题。尝试处理performance profiling in Flutter - 即记录一些时间线并分析框架工作负载中发生的情况。
2021 年 2 月 23 日编辑
Metal 二进制存档工作被证明是一条死胡同。有关详细信息,请参阅https://github.com/flutter/engine/pull/23914。这仍然是 Flutter 团队的高优先级项目,但目前尚不清楚修复的时间表。
结束编辑
否则:
一点背景:
着色器是 Skia 从各种绘图命令创建的小程序,用于创建 GPU 可以执行以在屏幕上实际绘制像素的程序。编译它们可能会花费大量时间,并且不同的场景可能需要不同的着色器程序。 Flutter 的架构旨在缓存和重用已编译的着色器程序,以便在编译后可以重用它们。 Skia 中基于 OpenGL 的后端对此提供了支持,但仍在为基于 Metal 的后端开发中(请参阅https://skbug.com/10804)。
迁移到 Metal 有很多充分的理由。
我们确实考虑过supporting both OpenGL and Metal,但决定不考虑。解决堆栈中该层错误的资源有限,我们已经意识到 Metal 解决了许多与性能相关的问题。
【讨论】: