chromium for android v38硬件绘制渲染结构及流程分析(render进程)

38渲染这块变化比较大,以前看的29版本有些地方也是一知半解的,没整太明白,
感觉还是有必要重新梳理一下,温故知新吧。
一.blink合成模块结构
RenderLayerCompositor
blink中管理RenderLayer绘制顺序的类。
RenderLayer
代表网页上的一层内容,RenderLayer与GraphicsLayer一一对应。
GraphicsLayer
对blink而言代表一层网页内容绘制命令的存储目的地。
WebContentLayer
封装在GraphicsLayer中,是blink提供的抽象类,
需要平台实现,各个平台提供实际的后端存储。
chromium for android平台的后端存储类是PictureLayer.

1.RenderObject到RenderView中间的各个类是Render Tree上的不同类型的元素
与Dom Tree上的可见元素相对应。
2.RenderView是Render Tree的根节点,也是RenderLayer Tree的根节点,
所以在RenderLayerCompositor中持有,方便其遍历RenderLayer Tree.
3.开启合成加速的情况下,每个RenderLayer都会对应一个GraphicsLayer,
所以对应RenderLayer Tree,会由一颗GraphicsLayer Tree.这颗GraphicsLayer
Tree的根节点也在RenderLayerCompositor中持有。因为RenderLayerCompositor
负责为每一层RenderLayer创建GraphicsLayer.所以RenderLayerCompositor控制和
管理着RenderLayer Tree和GraphicsLayer Tree.
二.blink合成模块与chromium cc模块的对接层
第一部分讲到,RenderLayer包含的一层网页内容对blink模块而言是绘制在GraphicsLayer
包含的WebContentLayer代表的后端存储上。这块后端存储需要具体平台提供具体实现,chromium
for android提供的是PictureLayer,PictureLayer中间接包含了SkPicture,这是最终的实际存储目的地。
cc模块是chromium用来实现网页合成的模块,blink模块输出的网页绘制命令正是cc模块的输入。

下图给出了Blink::GraphicsLayer到cc::PictureLayer的途径。


1.WebContentLayerImpl,WebLayerImpl起绑定作用,将blink的Layer绑定到cc模块的Layer.

三.chromium cc模块的结构(34开始光栅化和绘制就有很大不同了,下面的内容很可能写错了,不是38的流程了)

Render进程使用cc模块完成网页内容的光栅化以及硬件绘制。

Render进程中cc模块的基本功能是:

1.创建多个Tile覆盖一层网页内容,一层网页内容的信息包含在PictureLayerImpl中,

PictureLayerImpl负责创建覆盖其自身的Tile.

2.Tile对应cc模块的一个Resource。cc模块的Resource对应ResourceProvider的一个内部

Resource,这个Resource包含了texture的信息,以及光栅化buffer的信息。

3.光栅化过程是将PictureLayerImpl包含的网页内容,以像素的形式存储到Tile包含的光栅化buffer上。Chromium 38的提供了三种光栅化方式:GpuRaster,ImageRaster, PixelRaster。

4.光栅化的方式决定是否需要将光栅化buffer上的内容upload到Tile包含的texture上。

GpuRaster的方式光栅化本身就是gpu在texture上执行的,不需要再upload.

ImageRaster以及PixelRaster,光栅化是cpu在sharedMemory上执行的,需要将内存中光栅化buffer上的内容upload给Tile包含的texture.为硬件绘制做准备。

5.执行硬件绘制过程.GlRender调用到GPU进程执行。

Cc模块完成上述基本功能依赖的基础结构如下:


PicturePileImpl包含的网页信息通过Tile与RasterBuffer及Texture关联起来,光栅化后,网页内容以像素形式存储在RasterBuffer上,upload之后,网页内容转移到Texture上,

gpu操作texture完成硬件绘制。

cc模块结构图:




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值