Flutter -- engine整体架构

整体框架

Flutter -- engine整体架构_第1张图片

Flutter框架是一个分层的结构,每个层都建立在前一层之上。

最下层embedder,提供五个thread,将引擎移植到平台的中间层代码 渲染设置,原生插件,打包,线程管理,事件循环交互操作。

主要对应engine里面shell相关模块,common是对外的统一接口,gpu是gpu相关的统一接口,platform下面的对应的不同平台的支撑,分辨是哦android,darwin,embedder,fuchsia,glfw,linux,windows,common。其次是profiling,性能调优方面的支持。

engine/embedder层的架构

Flutter -- engine整体架构_第2张图片

创建四个线程 并把当前线程设置platform thread

  • 在GPUThread创建rasterizer
  • 在platform thread(APP主线程) 创建PlatformView 并获取其VSyncWaiter传递给Engine
  • 创建IO manager 在 IO 线程上
  • 创建engine 在UI线程上

    实际上就是创建下面这四个

    std::unique_ptr 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相关读取

你可能感兴趣的:(flutter)