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

本文详细分析了Android 4.0.1 WebKit的软件渲染过程,包括WebKit如何将绘制命令存储在SKPicture中,如何准备将这些命令绘制到Canvas,以及最后如何将命令集合实际显示到屏幕上的步骤。涉及到的关键步骤包括WebCore的GraphicsContext、RenderObject与RenderLayer的关系、SurfaceFlinger的混合与帧缓冲区更新。
摘要由CSDN通过智能技术生成

android4.0.1 webkit 软件渲染过程可分为三部分。

一. webkit 将绘制网页的命令存储在SKPicture中

这个过程的详细顺序图如下:


顺序图下载地址


                                                                                                                                              webkit render 记录网页绘制命令顺序图

以下是这个过程的详细说明。

webviewcore.cpp的contentInvalidate()会调用webviewcore.cpp的contentDraw(),这个函数会回调webviewcore.java中的contentDraw().

webviewcore.java contentDraw()  会发送消息EventHub.WEBKIT_DRAW。这个消息在webViewCore.java的EventHub的transferMessage()中处理,

调用WebViewCore.java的webkitDraw();
webkitDraw()中会先调用nativeRecordContent(),nativeRecordContent()会调用WebViewCore.cpp中recordContent().
recordContent()会调用recordPictureSet().
recordPictureSet()中会调用layoutIfNeededRecursive()以便得到最新的contentwidth和contentheight()
layoutIfNeededRecursive()会调用FrameView.cpp的Layout()从而触发整颗RenderTree的Layout.
 recordPictureSet()在调用layoutIfNeededRecursive()后,会接着调用rebuildPicture()。
 rebuildPicture()会创建一块新的SKPicture,
SkPicture 用来记录绘制命令,这些命令会在以后draw到一个指定的canvas上。
这个SKPicture将被保存在WebViewCore.cpp中的 m_content的WTF::Vector<Pictures> mPictures结构中。
SKPicture 的实例作为参数传给SkAutoPictureRecord的构造函数。
SKAutoPictureRecord的构造函数会调用SKPicture的beginRecording().
在SKPicture的beginRecording()函数中会创建一块SKBitmap,和一块SkPictureRecord。并将新创建的SKBitmap作为Device设置给SKPictureRecord.
SKPictureRecord继承自SKCanvas.
SKPictureRecord会作为参数传给PlatformGrap
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值