Chromium Graphics: Android L平台上WebView的变化及其对浏览器厂商的影响分析

原创文章,转载请以链接形式注明原始出处http://blog.csdn.net/hongbomin/article/details/40799167.

摘要:Google最近发布的Android L平台在图形渲染方面有一项重要的改进,它引入了一个专门的线程用于执行渲染工作,UI线程负责生成的显示列表(DisplayList),而新引入的渲染线程负责重放(playback)这个显示列表绘制最终的内容,为了支持Android L系统新的渲染模型,Chromium WebView在渲染模型方面也作了相应的调整。本文将深度分析Chromium WebView的渲染模型是如何无缝整合到Android L中,以及对目前市场主流浏览器厂商将会产生什么样影响等问题。此外,本文对Chrome on Android浏览器的渲染模型和流水线工作也做了相应的介绍。

最新AndroidL平台的新特性 –Render线程

在Android L产品发布会上,Google向外界宣布了诸多AndroidL系统的新特性,引起了开发者的广泛关注。除了大力倡导的Material设计理念之外,还有一个非常值得关注的亮点就是,AndroidL这次有了独立的渲染线程。

长期以来,Android平台一直被人诟病的就是系统流畅度问题,用过Android 的人总感觉应用程序在来回切换或者执行动画时有些卡顿,或者在处理触摸事件时动画会停止,与iOS系统整体流畅度还是存在一定差距。从直觉上来说,Davilk虚拟机似乎是问题的罪魁祸首,因为虚拟机总是要以一种不可预测、阻塞UI线程的方式启动垃圾自动回收机制。然而,实际的情况时,Davilk的GC可能背了黑锅。问题的根源可能是由阻塞UI的渲染模型引起的,UI线程实在太忙了,要做的事情太多了,既要处理触摸事件,又要遍历View层次结构给每个需要更新的View逐一派发onDraw事件,还要与GPU设备打交道,执行GPU命令。Android团队一直致力于解决这个问题,提高系统UI的整体流畅度。

自Android 3.0开始就启用硬件加速渲染机制,绘制View分为更新显示列表(DisplayList)和重放(playback)显示列表两个步骤,解决了软件绘制方式性能低下的问题,然而仍没有将GPU渲染工作从UI线程中解放出来。Android L系统为此引入了一个专门的渲染线程,彻底将重放显示列表的任务从UI线程中独立出来,例如动画可以以off-main-thread的方式运行,只要动画的时间线设置好了,渲染线程负责更新每一帧的动画,而UI线程可以腾出手去处理其他更加紧急的事情。

大道至简,大多设计原理念都是相通的。相似的渲染线程模型其实在Chromium图形栈中早就实现了。 Chrome浏览器中,就有一个专门的GPU进程(或线程)和GPU设备进行交互,保证图形的渲染不会阻塞Blink线程,也不会阻塞浏览器线程,而且为了保证Web页面中对用户输入事件的及时响应,Chromium还会将用户输入事件由Browser进程首先派发给页面的Compositing线程,而非Blink线程,然后再由Compositing线程决定如何处理这个事件,例如当快速滑动页面时,Compositing线程会先于Blink线程将缓存好的Tile绘制出来,然后再将这个输入事件转发给Blink线程,Blink线程根据滑动距离重新计算需要曝光的区域,更新Tile的状态信息,为刷新下一帧准备好内容(注:为了与Android系统渲染线程做出区分,这里提到的Blink线程指的是ChromiumRenderer线程,在Web世界里,Blink线程类同于UI线程,负责页面的布局和JavaScript代码的执行,而Compositing线程负责将Web页面中多个层的合成,从而使页面的布局和层合成能够并行)。

Android L系统中UI线程根据View层次结构和更新区域,向需要重绘的View发送onDraw事件请求更新显示列表,更新完毕后会同步到渲染线程上,然后再由渲染线程上重新绘制更新过的显示列表。如下图所示:


注:因为目前Android L只提供了开发者预览版的Image文件,尚无法从AOSP中获取完整的源代码,貌似还有些GPL许可证问题正在解决中。类ThreadedRenderer应该是AndroidL平台引入新的线程化渲染器实现。

Chromium WebView的变化

最直观的变化就是,Android L系统Chromium WebView开始支持WebGL,WebAudio以及WebRTC等新潮的HTML5特性,使Android系统上WebView组件更接近Chromium浏览器的HTML5能力,同时也表明,Android团队将会花大力气将WebView打造成为一个功能完善,具有相当竞争力的平台HTML5运行环境。实际上,iOS系统WebView已经走在Android系统前面,尤其是iOS8系统一系列关于WebView的增强,已经和Safari浏览器内核一致了,例如提供一个多进程版本的WKWebView,增加对WebGL支持, 以及使用Nitro JIT加速的JavaScript引擎,无论从性能还是功能方面,都上了一个台阶了。Android WebView这方面还需要继续努力。两大移动平台大力增强WebView的能力,对于HTML5平台的推进绝对是一个重大利好。

<
  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值