关于Flutter你要知道的可能都在这里

作者: 埃赛尔 | 来源:发表于2019-07-16 18:55 被阅读22次

开局一张图:

image.png

先从一张架构预览图说起吧:
Flutter架构分Framework/Engine/Embedder三层
Framework主要提供API的支持和不在本次讲述的范围之内,主要是综合闲鱼技术,美团技术,Flutter.io的一些文章以此管中窥豹对Flutter有个整体的认识,文中错误和理解偏差欢迎大佬指正
主要是对Embedder与Engine,DartVM,GPU之间交互,Embedder如何工作认识图如下:

image.png

Embedder是将Engine移植到平台的中间层代码

Embedder有四个类型的Runner
Engine和这四个Runner的关系是:

Embedder为每个Engine实例的UI,GPU和IO任务运行程序创建专用线程。所有引擎实例共享相同的Platform Thread和Platform Task Runner

问题1:FlutterEngine什么时候会创建实例?一个APP中会存在多个实例么?

带着问题先把Embedder了解完

PlatformRunner:

一个对Engine的Facad,主线程主要负责Engine和UITaskRunner之间的消息传递,但是官方要求所有与FlutterEngine的交互需要发生在PlatformRunnerThread中
PlatformRunnerThread:PlatformThread又是什么?Engine创建的时候都会创建一个线程用供PlatformRunner使用
因此我们可以得出结论
Engine和Embedder交互在PlatformThread中完成而且只和PlatformRunner交互

UITaskRunner:

创建Engine的时候会开辟一个子线程运行UITaskRunner,在这个线程中会创建DartVM同时DartVM创建DartRootisolate
Dart的isloate是自己管理的所以外部线程无法直接访问:
因此Engine的UI渲染任务通过PlatformRunner提交给UITaskRunner,UITaskRunner与DartVM交互(UITaskRunner告诉isolate开始构建layerTree,isolate将构建好的layerTree返回给UITaskRunner)

问题2:同线程内 UITask如何同DartVM的isolate 通信?

GPUTaskRunner:

创建Engine的时候同时会开辟一个子线程运行GPUTaskRunner,此时该Thread应该叫GPUThread,在GPU Task Runner将Layer Tree提供的信息转化为平台可执行的GPU指令。
GPU Runner会根据目前帧执行的进度去向UI Task Runner要求(VSync)下一帧的数据,在任务繁重的时候可能会告诉UI Task Runner延迟任务。

结合UITaskRunner和GPUTaskRunner附上下图:

image.png
在GPUThreadRunner中将LayerTree合并成视图数据并交给Skia加工成GPU数据这些数据最终会通过OpenGL最终提供给GPU渲染
问题3:LayerTree是构建生成的?

因此可以看到Flutter关注如何在两次VSync信号之间计算并合并成视图数据交给GPU渲染

IOTaskRunner:

1)主要功能是从图片存储(比如磁盘)中读取压缩的图片格式,将图片数据进行处理为GPU Runner的渲染做好准备。IO Runner首先要读取压缩的图片二进制数据(比如PNG,JPEG),将其解压转换成GPU能够处理的格式然后将数据上传到GPU。
2)加载其他资源文件

相关文章

  • 关于Flutter你要知道的可能都在这里

    开局一张图: 先从一张架构预览图说起吧:Flutter架构分Framework/Engine/Embedder三层...

  • 带上猫咪去打针

    关于猫咪疫苗,你需要知道的一切,都在这里了。 欢迎关注!

  • 2018-02-02

    关于ZigBee,你需要知道的都在这里了! 在智能硬件和物联网领域,时下大名鼎鼎的ZigBee可谓是无人不知,无人...

  • 关于快速阅读,你需要知道的都在这里

    速读是阅读的基础技能,但为什么学校没教呢? 昨天回顾了六哥知识管理训练营的内容,打算把里面讲东西都自己梳理一遍,因...

  • 关于快递重量,你需要知道的都在这里

    关于国际快递的重量,你是否有很多问号? 为什么明明3kg的东西,却收我5kg的钱? 牛气国际快递OS:【实在是冤枉...

  • 关于Alluxio 2.0,你要知道的都在这里了

    2019-02-12,Alluxio团队奋战了快半年的一个重大的里程碑:2.0.0预览版的第一个候选版本(Rele...

  • 年金

    年金是啥[嘿哈][嘿哈] 你所想要知道的都在这里

  • Flutter面试题汇总

    Flutter面试题汇总 一次Flutter面试经验,这些问题你一定要知道!必问!! Flutter这么火,都有哪...

  • Flutter面试题汇总

    Flutter面试题汇总 一次Flutter面试经验,这些问题你一定要知道!必问!! Flutter这么火,都有哪...

  • 闲笔

    当世界都在为你喝彩时,你要知道,这里面一定混杂着某人的嘲讽。

网友评论

    本文标题:关于Flutter你要知道的可能都在这里

    本文链接:https://www.haomeiwen.com/subject/ghkpkctx.html