Flutter-engine整体架构

整体框架

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相干读取

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理