layerTree是如何上传到engine的
在dart的layer代码中,可以看到注释写道:在更新layerTree时,需要先使用root layer调用addToScene(SceneBuilder)方法,然后再调用SceneBuilder的build方法,来完成Scene的构造。之后,可以使用window.render(Scene)方法来更新界面显示。
但是如果我们查看dart代码,会发现SceneBuilder的实现只出现在web_ui目录下,显然这个目录是web渲染相关的代码所在地,那么native engine渲染代码在哪里呢?
实际上,dart代码中是找不到native engine渲染代码的。native engine渲染相关的代码都是用c++写的,位于lib/ui/compositing目录下,dart engine有个有意思的依赖,叫做tonic,这个依赖中定义了一个DartWrappable类,任何继承自这个类的C++类都能够被方便的作为dart接口实现类被使用。虽然上面提到的SceneBuilder, Scene都是dart代码中定义的interface,但实际上它们都是使用C++代码实现的,因此无法在dart代码中搜索到相关痕迹。
了解了如何更新layerTree,再来看下engine何时会获取layerTree的Scene,用于渲染。
// todo…