GPU的新应用:浅谈浏览器硬件加速之争
IE9 Beta 的发布让浏览器的GPU硬件加速一夜之间成为了热门话题,随后Firefox、Google Chrome 等浏览器都纷纷将硬件加速功能作为当务之急,Opera 更是率先开始研究移动平台上的浏览器硬件加速,浏览器厂商开始了“硬件加速之争”。
在IE9中,微软使用了Direct2D、DirectWirte、XPS等新技术进行文字、图像、视频、SVG等内容的渲染。Direct2D的加入可以让浏览器调动GPU来优化渲染丰富的图形,从而带来更快的Web程序运行速度,以及更高质量的浏览体验。
对一些图形操作来说,GPU是更合适的选择,比如GPU在执行Alpha混合与双线性图形缩放的时候就比CPU快得多,还可以利用像素着色器执行复杂的每像素计算。
利用GPU执行更多任务,CPU资源就得以释放给其他浏览器子系统,还能获得更流畅的动画和视频播放效果。
根据Mozilla提供的资料,Firefox和IE9在Windows平台上的实现方式完全一样,而在Mac及Linux平台上的实现方式目前还没有特别细的资料。
互联网巨头 Google 自己的 Chrome 浏览器也有一套完整的GPU硬件加速方案,而且是一种非常特殊的硬件加速方案。
在硬件加速条件下,GPU接受来自渲染进程的命令,并将其输入OpenGL 或 Direct3D 进行处理,Chrome在此一直落后于其他对手,原因是Google考虑到安全因素,将浏览器的渲染工作安排在一个独立的进程内,导致无法与操作系统的硬件接口直接通信。因此为了实现硬件加速,Chrome需要特殊的方案:
在渲染进程和GPU两者无法直接通信的情况下,Chrome特意分出了一片共享存储区,让渲染进程将命令缓存录入存储区,再等GPU从存储区读取命令,进而执行相应命令。这方案解决了核心问题,但因为始终不是直接通信,功能上还有一定的限制。
依靠这个结构,Chrome开始对部分内容实施硬件加速。对于普通的网页内容(文本、CSS、静态图片)依旧直接使用CPU渲染,而GPU负责大型媒体(如视频)的加速渲染任务,更为特殊的WebGL元素,则完全交由GPU渲染。对各层面的内容渲染完成后,最后关键的一步是将所有内容揉合进同一个页面,这项工作CPU无法很好胜任,所以这一部分工作也完全可以交由浏览器来完成。