webview chromium v35 2dcanvas实现流程详解

与原生chromium(surfaceview方案)有很大不同。下面详细记下webviewchromium中2dcanvas的实现方案.及其在个别gpu上存在的一个性能瓶颈。

三个线程(gpu线程,render线程,合成线程)及render线程调用gpu线程实现硬件绘制的具体过程

2dCanvas采用硬件加速的情况下,chromium内核中会多开一个gpu线程,gpu线程负责直接调用gles2库的gl指令。render线程作为gpu线程的一个client端,对gpu指令的所有调用都是通过gpu线程完成的。网页上js通过2dcontext调用的具体绘制操作都运行在render线程中。这些绘制操作最后都会通过GrContext转给gpu线程。在gpu线程中调用相应的gl指令。WebGraphicsContext3DInProcessCommandBuffer可以看做单进程版本gpu线程的入口类。下面我们看GrContext与

WebGraphicsContext3DInProcessCommandBuffer的关系图。


对于gpu线程可以认为2dcanvas硬件绘制的入口是GrContext。

下面我们看网页上的js命令通过2d context调用的绘制命令,通过GrContext最终绘制到texture上这个过程涉及的整体类图。


其中红色的路径标注的是网页上的js命令通过2d context调用的绘制命令,最终绘制到texture上的关键路径。

页面上通过2d context调用的gl操作最终都是通过GrContext调用到系统gles库的gl指令的。GrContext又是通过GrGpuGL调用gles库的gl指令,最终绘制到texture上。GrContext-GrGpuGL-texture之间的类图如下。


GrGpuGL中调用的gl指令就都通过WebGraphicsContext3DInProcessCommandBuffer传递到了gpu线程,从而调用到gles2库中的gl指令。

canvas-surface-device之间的关系图如下:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值