- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Android WebView执行GPU命令的过程分析 Android WebView使用的Chromium引擎,虽然没有自己的GPU进程或者线程,但是却可以执行GPU命令。原来,Android WebView会给它提供一个In-Process Command Buffer GL接口。通过这个接口,Chromium引擎就可以将GPU命令提交给App的Render Thread执行。本文接下来就详细分析Android WebView执行GPU命令的过程。 从前面这篇文章可以知道,Chromium渲染引擎在有自己的GPU进程或者线程的情况下,是通过一个Command Buffer GL接口执行GPU命令的。这个Command Buffer GL接口通过一个GLES2Implementation类描述。Android WebView给Chromium引擎提供的In-Process Command Buffer GL接口,同样是通过GLES2Implementation类描述的。这样,Chromium渲染引擎就不用关心它发出的GPU命令是如何执行的。 在Chromium渲染引擎中,需要执行GPU命令的是Render端和Browser端。Render端执行GPU命令是为渲染网页的UI,而Browser端执行GPU命令是为了将Render端渲染的网页UI合成显示在屏幕上。对Android WebView来说,它的Render端会将网页抽象成一个CC Layer Tree,然后使用一个Synchronous Compositor将它渲染在一个Synchronous Compositor Output Surface上,如图1所示: Android WebView的Browser端同样会将自己要合成的UI抽象为一个CC Layer Tree,然后使用一个Hardware Renderer将它渲染在一个Parent Output Surface上,如图2所示: Browser端的CC Layer Tree比较特别,它只有两个节点。一个是根节点,另一个是根节点的子节点,称为Delegated Render Layer,它要渲染的内容来自于Render端的渲染输出。从前面一文可以知道,Render端的渲染输出是一系列的Render Pass。每一个Render Pass都包含了若干个纹理。这些纹理是在Render端光栅化网页时产生的。Browser端的Hardware Renderer所要做的事情就是将这些纹理渲染在屏幕上。这个过程也就是Browser端合成网页UI的过程。 不管是Render端,还是Browser端,当它们执行GPU命令的时候,都是通过GLES2Implementation类描述的一个In-Process Command Buffer GL接口写入到一个Command Buffer中去的。只不过在Android WebView的情况下,这些GPU命令会被一个DeferredGpuCommandService服务提交给App的Render Thread执行,如图3所示: Render端和Browser端将要执行的GPU命令写入到Command Buffer之后,就会请求DeferredGpuCommandService服务在App的Render Thread中调度执行一个Task。这个Task绑定了InProcessCommandBuffer类的成员函数FlushOnGpuThread。InProcessCommandBuffer类的成员函数FlushOnGpuThread又是通过一个Gpu Scheduler按照上下文来执行请求的GPU命令,并且这些GPU命令在执行之前,先要经过一个GLES2 Decoder进行解码。这个过程可以参考前面一文。 对于Browser端来说,它本来就是在App的Render Thread中请求执行GPU命令的。这时候DeferredGpuCommandService服务会直接在当前线程中调用InProcessCommandBuffer类的成员函数FlushOnGpuThread,以便执行请求的GPU命令。 对于Render端来说,它在两种情景下需要请求执行GPU命令。第一种情景是光栅化网页的UI,第二种情景是绘制网页的UI。这两种情景都是发生在Render端的Compositor线程中。关于Render端的Compositor线程,以及网页UI的光栅化和绘制操作,可以参考前面这个系列的文章。 上述两种情景都会将要执行的GPU操作抽象为一个DrawGLFunctor对象。对于第一个
您可能关注的文档
- Ansof瞬态1-1讲诉.ppt
- 【志鸿优化设计-赢在课堂】(人教版)2014-2015高中物理选修3-5课件16.4碰撞解析.ppt
- AIP全文数据库使用指南讲诉.ppt
- 【志鸿优化设计-赢在课堂】(人教版)2014-2015高中物理选修3-1【同步精品课件】1.7静电现象的应用解析.ppt
- 【志鸿赢在高考】(新课标)2016届高考英语二轮复习攻关篇专题二夹叙夹议文解析.doc
- 【必修1】第12课甲午中日战争到八国联军侵华解析.ppt
- 【恒大雅苑】装修标准解析.docx
- 【成才之路】2014-2015学年高中数学1.1从普查到抽样课件北师大版必修3解析.ppt
- New JJ-Max Party Rentals讲诉.ppt
- 【多图】字体推荐跟点评--设计师必备字体参考解析.docx
- ANSYS模态实例和详细过程讲诉.doc
- Android基础讲诉.docx
- ansys软件中轴的画法讲诉.doc
- 【成才之路】2015-2016学年高中历史第八单元世界经济的全球化趋势单元总结课件新人教版必修2解析.ppt
- 【成才之路】2015-2016学年高中历史第一单元第2课古代手工业的进步课件新人教版必修2解析.ppt
- 【成才之路】2015-2016学年高中历史第二单元第7课第一次工业革命课件新人教版必修2解析.ppt
- Ansys16.0安装破解教程讲诉.docx
- NOIP2013初赛提高组c试题讲诉.doc
- NOIP的知识点讲诉.ppt
- 【成才之路】2015-2016学年高中历史第八单元第22课战后资本主义世界经济体系的形成课件新人教版必修2解析.ppt
有哪些信誉好的足球投注网站
文档评论(0)