chromium for android v34 2dcanvas硬件渲染实现分析
这篇接着上一篇2dcanvas硬件绘制,分析保存绘制结果的texture被合成到on screen framebuffer上的过程。
1.webkit为canvas元素相应的render树节点RenderHTMLCanvas,
创建RenderLayer的步骤例如以下:
RenderLayerModelObject::createLayer()调用
RenderLayer::insertOnlyThisLayer()将创建完
的RenderLayer增加到renderlayer tree中。
2.Canvas2DLayerBridge包括WebExternalTextureLayerImpl实例,
WebExternalTextureLayerImpl的构造函数中创建的TextureLayer
被封装在WebExternalTextureLayerImpl中包括的WebLayerImpl实例中。
这里创建的WebLayerImpl关联到canvas节点相应的RenderLayer上的步骤例如以下:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvamF5bGluemhvdQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
GraphicsLayer::setupContentsLayer()中将WebExternalTextureLayerImpl包括的
WebLayerImpl实例作为子节点关联到GraphicsLayer
包括的WebContentLayer包括的WebLayerImpl实例上。
这样,Canvas2DLayerBridge包括WebExternalTextureLayerImpl实例中创建的TextureLayer
就被关联到了renderlayer tree间接包括的cc模块中的layer tree上。
以上两个过程涉及的类图:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvamF5bGluemhvdQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
chromium for android硬件渲染流程全解析(render进程)可知,这颗layer tree终于会被传给cc::LayerTreeHost持有。
在页面更新时,会遍历这颗layer tree依次调用各个节点的Update()。
3.canvas元素相应renderlayer间接包括的texturelayer得到保存绘制结果信息的mailbox的过程。
SkBitmapDevice::onAccessBitmap()返回的bitmap是在
SkGpuDevice的构造函数中创建的,这个bitmap由下面语句创建:
SkBitmapDevice(make_bitmap(context, renderTarget))。
所以。这个bitmap的内容就是保存硬件绘制结果的目标texture的内容。
SkSurface_Gpu::onNewImageSnapshot()以bitmap为參数创建了SkImage.
Canvas2DLayerBridge::prepareMailbox()将这个SkImage封装进mailboxinfo.
将mailboxinfo送出去之前。Canvas2DLayerBridge::prepareMailbox()调用了
WebGraphicsContext3D::produceTextureCHROMIUM()。终于调用到
GLES2DecoderImpl::DoProduceTextureCHROMIUM().
WebExternalTextureLayerImpl::PrepareTextureMailbox()
将blink::WebExternalTextureMailbox封装成cc::TextureMailbox返回给
TextureLayer。
4.Browser进程消耗保存绘制结果的目标texture的过程
TextureLayer::Update()仅仅做一件事就是得到包括绘制结果的texture,对于
canvas元素相应的texture,得到的是封装了绘制结果的mailbox.
TextureLayer::PushPropertiesTo()中将这个mailbox传给了TextureLayerImpl.
TextureLayerImpl::WillDraw()中调用
ResourceProvider::CreateResourceFromTextureMailbox().将mailbox由保存在了
ResourceProvider创建的Resource中。
Browser进程中运行的合成过程会调用到,
GLRenderer::DrawRenderPassQuad()
ScopedReadLockGL::ScopedReadLockGL()调用
ResourceProvider::LockForRead()
ResourceProvider::LockForRead()中会调用
ConsumeTextureCHROMIUM()终于调用到
GLES2DecoderImpl::DoConsumeTextureCHROMIUM().
以上过程,曾经的文章中分析过,不细分析了。
chromium for android v34 2dcanvas硬件渲染实现分析的更多相关文章
- Chromium Graphics: Android L平台上WebView的变化及其对浏览器厂商的影响分析
原创文章.转载请以链接形式注明原始出处为http://blog.csdn.net/hongbomin/article/details/40799167. 摘要:Google近期公布的Android L ...
- 理解WebKit和Chromium: 调试Android系统上的Chromium
转载请注明原文地址:http://blog.csdn.net/milado_nju 1. Android上的调试技术 在Android系统上,开发人员能够使用两种不同的语言来开发应用程序,一种是Jav ...
- Chromium on Android: Android在系统Chromium为了实现主消息循环分析
总结:刚开始接触一个Chromium on Android时间.很好奇Chromium主消息循环是如何整合Android应用. 为Android计划,一旦启动,主线程将具有Java消息层循环处理系统事 ...
- Android系统修改硬件设备访问权限
Android系统修改硬件设备访问权限 在硬件抽象层模块文件(so)文件中,提供的函数调用open函数来打开设备文件,比如/dev/gpio,如果不修改设备文件/dev/gpio的访问权限,那么应用程 ...
- 把Android原生的View渲染到OpenGL Texture
http://blog.csdn.net/u010949962/article/details/41865777 最近要把Android 原生的View渲染到OpenGL GLSurfaceView中 ...
- 转——Android应用开发性能优化完全分析
[工匠若水 http://blog.csdn.net/yanbober 转载请注明出处.] 1 背景 其实有点不想写这篇文章的,但是又想写,有些矛盾.不想写的原因是随便上网一搜一堆关于性能的建议,感觉 ...
- Android 应用开发性能优化完全分析
1 背景 其实有点不想写这篇文章的,但是又想写,有些矛盾.不想写的原因是随便上网一搜一堆关于性能的建议,感觉大家你一总结.我一总结的都说到了很多优化注意事项,但是看过这些文章后大多数存在一个问题就是只 ...
- 【转】Android应用开发性能优化完全分析
http://blog.csdn.net/yanbober/article/details/48394201 1 背景 其实有点不想写这篇文章的,但是又想写,有些矛盾.不想写的原因是随便上网一搜一堆关 ...
- Android应用开发性能优化完全分析
1 背景 其实有点不想写这篇文章的,但是又想写,有些矛盾.不想写的原因是随便上网一搜一堆关于性能的建议,感觉大家你一总结.我一总结的都说到了很多优化注意事项,但是看过这些文章后大多数存在一个问题就是只 ...
随机推荐
- 打造你自己ajax上传图片
今天,我们需要的图片上传插件,但是,互联网不提供符合他们的需要和易于使用的.所以我写了自己. 方法1,只使用jquery代码,.代码例如以下 <p> <label>上传图片&l ...
- A Game of Thrones(19) - Jon
The courtyard rang to the song of swords. Under black wool, boiled leather, and mail, sweat trickled ...
- Virtualbox mouse move in and out and file share with windows
How to use Virstalbox to share files with Linux and Windows, and to move the mouse in and out Virtua ...
- Delphi过程函数传递参数的八种方式
今天一同事问我为什么有些过程函数里面有Var而有些没有,不解,遂到网上百度,得解.快哉,快哉. 在Delphi过程.函数中传递参数几个修饰符为Const.Var.Out.另一种不加修饰符的为默认按值传 ...
- python基础教程_学习笔记10:异常
异常 什么是异常 Python用异常对象来表示异常情况.遇到错误后,会引发异常.假设异常对象并未被处理或捕捉,程序就会用所谓的回溯(Traceback,一种错误信息)终止运行: >>> ...
- (ZT)LoadRunner9.0成功破解方法
LoadRunner9.0软件下载地址: http://www.3atesting.com/filedown/LR9Download.exe 破解所需文件 http://download.csdn.n ...
- net 面向接口框架
Asp.net 面向接口框架之应用程序上下文作用域组件 在团队中推广面向接口开发两年左右,成果总体来说我还是挺满意的,使用面向接口开发的模块使用Unity容器配置的功能非常稳定,便于共享迁移(另一个项 ...
- 【mysql】关于子查询的一个例子
假设表my_tbl包含三个字段a,b,c:现在需要查询表中列a的每个不同值下的列b为最小值的记录量. 比如表记录为: a b c 1 3 'cd' 2 3 'nhd' 1 5 'bg' ...
- Python的Tkinter将窗口置顶
root = Tk()root.wm_attributes('-topmost',1)
- 强势围观,CSDN代码引用bug
看我写的一篇blog http://blog.csdn.net/laijieyao/article/details/41014355,在代码上引用了微软雅黑的字体,结果代码显示出来把我给惊呆了 竟然 ...