基础概念预学习
纹理映射(Texture Mapping)是绘制复杂场景真实感图形最为常用的技术,它可以通过纹理来表达表面丰富的几何细节和光照细节,甚至可以通过映射后纹理的变形来表达物体的几何形状:在未增加物体多边形数情况下,增强了物体的真实感效果
感觉就是用来表达图形的一种表达方式,具体的我不知道
skia是个2D向量图形处理函数库,包含字型、坐标转换,以及点阵图都有高效能且简洁的表现。不仅用于Google Chrome浏览器,新兴的Android开放手机平台也采用skia作为绘图处理,搭配OpenGL/ES与特定的硬件特征,强化显示的效果
应该是一个函数库,对图形数据预处理,可能转换为GPU识别的指令啥的,再通过GL传递给GPU指令
Compositor 将来自各个应用的 surface(s) 合成为一帧
排版,感觉是将多个应用的画面出现在同一个画面上,这里做排版使用
GPU可以访问的数据我们先叫他们GPU资源,资源分为缓冲和各种纹理
Flutter 的架构
image.pngFlutter 主要分为三个核心模块
Framework:基于 Dart 语言构建的 framework,包括了动画以及各种组件
Engine:基于 C/C++ 构建的引擎,包括了 Skia 和 DartVM, 以及在不同平台实现的 shell 层,Engine 通过封装好的 Embedder API 去调用不同平台的能力
Embedder:嵌入层,将 Flutter 嵌入到各个平台上。Embedder 负责范围包括原生平台插件、线程管理、事件循环等。
Flutter Engine 线程模型
image.pngUI Task Runner 是执行 Dart root isolate 的地方,root isolate 稍微特殊一点,它绑定了很多函数,这个 isolate 也就是运行应用所有 dart 代码的地方,绑定的函数可以提交渲染帧给 Engine,供 Engine 去渲染:
- Root isolate 通知 Flutter Engine 有帧需要渲染
- Flutter Engine 通知平台,需要在下一个 vsync 的时候得到通知
- 平台等待下一个vsync
- 对 Widgets进行布局操作,并生成页面的显示信息的描述,并提交给 Engine
GPU Task Runner 主要用于执行设备 GPU 的指令。UI Task Runner 创建的 Layer Tree 是跨平台的,它不关心到底由谁来完成绘制。GPU Task Runner 负责将 Layer Tree 提供的信息转化为平台可执行的GPU指令。GPU Task Runner 同时负责绘制所需要的GPU资源的管理。资源主要包括平台 Framebuffer,Surface,Texture 和 Buffers等。
我的理解
- Flutter 代码是运行在root isolate,UI Task Runner之中,如果新开isolate,则是运行中Dart VM线程之中,只能做一些计算任务
- Flutter运行开始会生成Layer Tree,并告诉Engine,Engin通知平台,需要Vsync信号,平台GPU得到Vsync,UI Thread在Dart层生成layer tree
- Engine里有Skia ,VM,Compositor等处理后,通过GL操作GPU生成屏幕数据
- 嵌入层提供了各种线程,四种TaskRunner,原生插件衔接工作等
参考资料
Flutter Engine 线程模型,重点
Flutter/Dart中的异步编程之Future
flutter-异步编程
网友评论