整体框架
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相干读取 |
发表回复