整体框架
Flutter框架是一个分层的结构,每个层都建立在前一层之上。
最下层embedder,提供五个thread,将引擎移植到平台的中间层代码 渲染设置,原生插件,打包,线程管理,事件循环交互操作。
主要对应engine里面shell相关模块,common是对外的统一接口,gpu是gpu相关的统一接口,platform下面的对应的不同平台的支撑,分辨是哦android,darwin,embedder,fuchsia,glfw,linux,windows,common。其次是profiling,性能调优方面的支持。
engine/embedder层的架构
创建四个线程 并把当前线程设置platform thread
- 在GPUThread创建rasterizer
- 在platform thread(APP主线程) 创建PlatformView 并获取其VSyncWaiter传递给Engine
- 创建IO manager 在 IO 线程上
-
创建engine 在UI线程上
实际上就是创建下面这四个
std::unique_ptr<Shell> Shell::CreateShellOnPlatformThread if (!shell->Setup(std::move(platform_view), // engine_future.get(), // rasterizer_future.get(), // io_manager_future.get()) // )
Platform Task Runner
根据代码在初始化Engine的时候,将当前线程设置为PlatformTaskRunner的Thread,是Flutter和Native交互的桥梁,而且官方要求所有和Flutter的交互必须发生在PlatformThread中。
android app 进程所有的消息都是通过 Platform Task Runner 来接受处理
以android为例子,platform_view_android模块就是Flutter嵌入的Java代码和Flutter 的C / C ++代码之间的接口,ui相关就跑在RasterTaskRunner中,实际上就是GPU task runner中,和原生系统相关就跑在platformTaskRunner
UI task runner
Engine执行Dart root isolate代码,将其转换为layer tree视图结构。这个线程的过载会直接导致卡顿掉帧。
GPU task runner
GPU Task Runner中的模块负责将Layer Tree提供的信息转化为实际的GPU指令。
GPU Task Runner同时也负责配置管理每一帧绘制所需要的GPU资源,这包括平台Framebuffer的创建,Surface生命周期管理,保证Texture和Buffers在绘制的时候是可用的。
GPU Runner的过载会导致Flutter应用的卡顿。
用户不能向GPU task runner提交任务。
IO Task Runner
主要功能是从图片存储中读取压缩的图片格式,将图片数据进行处理为GPU Runner的渲染做好准备。
总体来说
Platform Thread | GPU Thread | UI Thread | IO Thread |
---|---|---|---|
Flutter Engine的接口 | 向GPU推送执行的指令 | 执行Dart root isolate代码 | io相关读取 |
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。