android4.0.1 webkit 硬件渲染过程分析

本文深入分析了Android 4.0.1 WebKit的硬件渲染流程,从WebView.java的onDraw()开始,经过drawContent()、drawCoreAndCursorRing(),直到调用drawGL()进行GPU加速渲染。硬件渲染涉及到的主要类包括GLWebViewState、TilesManager和SurfaceTexture。整个过程包括网页内容上传到GL Texture、SurfaceTexture作为缓冲区的角色、以及最终将内容渲染到屏幕的步骤。
摘要由CSDN通过智能技术生成
硬件渲染也可以分为三个部分,其中前两个部分与软件渲染相同。
我们来看apk中开启硬件加速后,硬件渲染的第三部分:

将保存有webkit绘制命令的SKPicture集合显示到framebuffer上

是怎样具体实现的。

下面的图是webkit 硬件渲染过程涉及的主要类的类图。


类图下载地址


下图是硬件渲染过程中paint的详细顺序图。


顺序图下载地址

也是从webview.java::onDraw()开始,调用webview.java drawContent(),drawContent()接着调用drawCoreAndCursorRing().
drawCoreAndCursorRing()中调用nativeGetDrawGLFunction得到WebView.cpp中drawGL()的函数对象GLDrawFunctor的实例指针。
drawCoreAndrCursorRing()中接着调用((HardwareCanvas) canvas).callDrawGLFunction(functor).这个函数的作用就是使GLDrawFunctor指向的函数得到调用。
所以WebView.cpp中的drawGL()开始执行。
WebView.cpp的drawGL()第一次执行时候会创建GLWebViewState,并调用GLWebViewState的m_glWebViewState->setBaseLayer()。将含有网页绘制命令的BaseLayerAndroid实例指针传给GLWebViewState.
GLWebViewState的drawGL()先通过TilesManager调用TransferQueue的updateDirtyBaseTiles().这个过程我们稍候分析。
接着调用TilesManager的gatherLayerTextures()把当前可用的BaseTileTexture加锁。
接着调用setupDrawing()为即将开始的drawGL()作准备。
这些准备工作包括:
1.为TilesManger的ShaderProgram设置所需信息;
2.调用setViewport()计算水平和垂直方向所需要的BaseTile数,并调用TilesManager的setMaxTextureCount()分配所需的BaseTileTexture.分配好的B

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值