Flutter开发线程模型学习

2021-04-04  本文已影响0人  小源子2016

基础概念预学习

GPU 纹理

纹理映射(Texture Mapping)是绘制复杂场景真实感图形最为常用的技术,它可以通过纹理来表达表面丰富的几何细节和光照细节,甚至可以通过映射后纹理的变形来表达物体的几何形状:在未增加物体多边形数情况下,增强了物体的真实感效果

感觉就是用来表达图形的一种表达方式,具体的我不知道

skia

skia是个2D向量图形处理函数库,包含字型、坐标转换,以及点阵图都有高效能且简洁的表现。不仅用于Google Chrome浏览器,新兴的Android开放手机平台也采用skia作为绘图处理,搭配OpenGL/ES与特定的硬件特征,强化显示的效果

应该是一个函数库,对图形数据预处理,可能转换为GPU识别的指令啥的,再通过GL传递给GPU指令

Compositor

Compositor 将来自各个应用的 surface(s) 合成为一帧

排版,感觉是将多个应用的画面出现在同一个画面上,这里做排版使用

GPU资源

GPU可以访问的数据我们先叫他们GPU资源,资源分为缓冲和各种纹理

Flutter 的架构

image.png

Flutter 主要分为三个核心模块
Framework:基于 Dart 语言构建的 framework,包括了动画以及各种组件
Engine:基于 C/C++ 构建的引擎,包括了 Skia 和 DartVM, 以及在不同平台实现的 shell 层,Engine 通过封装好的 Embedder API 去调用不同平台的能力

Embedder:嵌入层,将 Flutter 嵌入到各个平台上。Embedder 负责范围包括原生平台插件、线程管理、事件循环等。

Flutter Engine 线程模型

image.png

UI Task Runner 是执行 Dart root isolate 的地方,root isolate 稍微特殊一点,它绑定了很多函数,这个 isolate 也就是运行应用所有 dart 代码的地方,绑定的函数可以提交渲染帧给 Engine,供 Engine 去渲染:

  1. Root isolate 通知 Flutter Engine 有帧需要渲染
  2. Flutter Engine 通知平台,需要在下一个 vsync 的时候得到通知
  3. 平台等待下一个vsync
  4. 对 Widgets进行布局操作,并生成页面的显示信息的描述,并提交给 Engine
image.png

GPU Task Runner 主要用于执行设备 GPU 的指令。UI Task Runner 创建的 Layer Tree 是跨平台的,它不关心到底由谁来完成绘制。GPU Task Runner 负责将 Layer Tree 提供的信息转化为平台可执行的GPU指令。GPU Task Runner 同时负责绘制所需要的GPU资源的管理。资源主要包括平台 Framebuffer,Surface,Texture 和 Buffers等。

我的理解

参考资料

Flutter Engine 线程模型,重点
Flutter/Dart中的异步编程之Future
flutter-异步编程

上一篇 下一篇

猜你喜欢

热点阅读