Chromium改进硬件加速图形系统

Posted by pudd on August 28, 2010

近段时间,Chromium对图形系统进行了大幅的改进,一方面为了适应新的API(即WebGL,结合了Javascript和OpenGL的底层3D图形API)和新的标记语言(如Apple带头提出的3D CSS),一方面可以更好利用GPU来增强整个浏览器的图形绘制速度,受益于此,一些常见的操作如二维图像合成、伸缩,可以得到显著的加速。

在硬件加速条件下,GPU接受来自渲染进程的命令,并将其输入OpenGL 或 Direct3D 进行处理,Chrome在此一直落后于其他对手,原因是Google考虑到安全因素,将浏览器的渲染工作安排在一个独立的进程内,导致无法与操作系统的硬件接口直接通信。因此为了实现硬件加速,Chrome需要特殊的方案:

![](http://img.chromi.org/2010/08/TheGPUProcess.png "TheGPUProcess") 图片来源:[The Chromium Projects - GPU Accelerated Compositing in Chrome](https://sites.google.com/a/chromium.org/dev/developers/design-documents/gpu-accelerated-compositing-in-chrome) Google将这种方案称为GPU process. 在渲染进程和GPU两者无法直接通信的情况下,Chrome特意分出了一片共享存储区,让渲染进程将命令缓存录入存储区,再等GPU从存储区读取命令,进而执行相应命令。这方案解决了核心问题,但因为始终不是直接通信,功能上还有一定的限制。 依靠这个结构,Chromium开始对部分内容实施硬件加速。对于普通的网页内容(文本、CSS、静态图片)依旧直接使用CPU渲染,而GPU负责大型媒体(如视频)的加速渲染任务,更为特殊的WebGL元素,则完全交由GPU渲染。 对各层面的内容渲染完成后,最后关键的一步是将所有内容揉合进同一个页面,这项工作CPU无法很好胜任,而想使用GPU进行糅合工作,可以加入启动命令行参数`--enable-accelerated-compositing` via [The Chromium Blog](http://blog.chromium.org/2010/08/chromium-graphics-overhaul.html),