Composition过程

经过Build、Layout、Paint后,Render Tree变成Layer Tree,那么Layer Tree是如何合成,以变成最终的渲染数据呢?这就是Composition过程。

Mark阶段

Framework使用_neesaAddToScene字段标识当前图层是否需要进行合成,通常当一个Layer节点有子节点的变化(adoptChild、dropChild)或者Layer节点本身有变化时,需要将该标识设置为true,表示当前图层发生改变,需要重新合成。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
class Layer {
set alpha(int? value) {
if (value != _alpha) {
if (value == 255 || _alpha == 255) {
engineLayer = null;
}
_alpha = value;
markNeedsAddToScene();
}
}

set elevation(double? value) {
if (value != _elevation) {
_elevation = value;
markNeedsAddToScene();
}
}

void markNeedsAddToScene() {
if (_needsAddToScene) {
return;
}
_needsAddToScene = true;
}

}

Flush阶段

合成的Flush阶段是从renderView.compositeFrame方法开始

Read More

2023-2024年度总结

时间过的真快啊,一年又要过完了。还是要记录一下这一年的成长和收获,以及对未来的展望。

今年的行情很不好,不管是就业还是A股市场。虽说疫情已经放开管控,可不见经济快速的复苏,身边讨论的更多的是裁员、领“大礼包”。年中,公司也经历了两次裁员,自己也在反思要保持什么样的状态才能在这个时代生存下去。

今年做了哪些事情呢?

看电影

目前为数不多的爱好了,应该有三十几部。

Read More