硬件加速技术是指:使用 GPU 的硬件能力为帮助渲染网页, GPU 的作用主要是用来绘制 3D 图形并且性能特别好。
对于 GPU 绘图而言,当网页分层之后,部分区域的更新可能只在网页的一层或者几层,而不需要将整个网页都重新绘制。 通过重新绘制网页的一个或者几个层,并将它们和其他之前绘制完的层合成起来,既能使用 GPU 的能力,又能减少重绘的开销。
在 WebKit 中,只有把编译的 C 代码宏(macro)“ACCELERATED_COMPOSITING” 打开之后,硬件加速机制才会被开启,有关硬件加速的基础设施才会被编译进去。
如果一个 RenderLayer 对象具有以下特征之一,那么它就是合成层。
- RenderLayer 具有 CSS 3D 属性或者 CSS 透视效果。
- RenderLayer 包含的 RenderObject 节点表示的是使用硬件加速的视频解码技术的 * HTML5 “video” 元素。
- RenderLayer 包含的 RenderObject 节点表示的是使用硬件加速的 Canvas 2D 元素或者 WebGL 技术。
- RenderLayer 使用了 CSS 透明效果的动画或者 CSS 变换的动画。
- RenderLayer 使用了硬件加速的 CSS Filters 技术。
- RenderLayer 使用了剪裁(Clip)或者反射(Reflection)属性,并且它的后代中包括一个合成层。
- RenderLayer 有一个 Z 坐标比自己小的兄弟节点,且该节点是一个合成层
这么做的原因有三个:
- 首先当然是合并一些 RenderLayer 层,这样可以减少内存的使用量;
- 其二是在合并之后,尽量减少合并带来的重绘性能和处理上的困难;
- 其三对于那些使用单独层能够显著提升性能的 RenderLayer 对象,可以继续使用这些好处。
硬件渲染过程
首先,WebKit 决定哪些些是合成层并为它们分配后端存储。
其次,WebKit 需要遍历和绘制每一个合成层,也就是每个合成层可能有一个或者多个 RenderLayer 对象。
最后,渲染引擎将所有绘制完的合成层合成起来,这个是由 WebKit 的移植来完成的
总结
硬件加速是指用GPU的硬件能力来渲染网页
,GPU的主要作用是用来绘制3D图形并且有很好的性能
,对于GPU绘图而言,通常不像软件渲染那样只是计算其中更新的区域,一旦有新的更新请求,如果没有分层,引擎可能会重新绘制所有的区域,因为计算更新部分对GPU来说可能耗费更多的时间,当网页分层之后,部分区域的更新可能只在一层或几层,而不需要更新整个网页,通过重新绘制网页的一个或几个层,并将它们和其他之前绘制完的层合成起来,既能使用GPU的能力,又能够减少重绘的开销。